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

问题描述

我收到此错误:

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

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

getOID(不推荐使用)和getOid

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

是否可以解决此问题?

解决方法

如果您无法修改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}

另请参阅:

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...