java—如何在不访问源代码的情况下解决jackson中属性的getter定义冲突

vvppvyoh  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(447)

我得到这个错误:

HTTP Status 500 - Could not write JSON: Conflicting getter definitions for property "oid"

问题是这个类有两个相似的方法: getOID (不赞成)和 getOid 但是我不能修改这个类,因为它只是一个依赖项。
有办法解决这个问题吗?

xfb7svmp

xfb7svmp1#

如果不能修改 POJO 您可以实现自定义序列化程序或使用mixin特性。
假设您的类如下所示:

class Id {
    private int oid;

    @Deprecated
    public int getOID() {
        return oid;
    }

    public int getOid() {
        return oid;
    }

    public void setOid(int oid) {
        this.oid = oid;
    }

    @Override
    public String toString() {
        return "oid=" + oid;
    }
}

您需要创建一个具有额外配置的接口:

interface IdIgnoreConflictMixIn {
    @JsonIgnore
    int getOID();

    @JsonProperty
    int getOid();
}

现在,您需要注册此接口:

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

public class JsonMixInApp {
    public static void main(String[] args) throws IOException {
        Id id = new Id();
        id.setOid(1);

        ObjectMapper mapper = new ObjectMapper();
        mapper.addMixIn(Id.class, IdIgnoreConflictMixIn.class);

        mapper.writeValue(System.out, id);
    }
}

以上代码打印:

{"oid":1}

另请参见:
特定类中特定类型的自定义序列化程序
@jsonignore注解的等效代码设置是什么?
jackson解析json时使用未 Package 的根,但不能设置@jsonrootname
使序列化程序重写特定的忽略字段

相关问题