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

时间:2020-08-18 19:14:04

标签: java json jackson getter jackson2

我收到此错误:

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

问题在于该类具有两个类似的方法:

getOID(不推荐使用)和getOid

但是我不能修改类,因为它只是一个依赖项。

是否可以解决此问题?

1 个答案:

答案 0 :(得分:0)

如果您无法修改POJO,则可以实施自定义序列化程序或使用MixIn feature

假设您的课程如下所示:

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}

另请参阅:

相关问题