与java jackson不同的序列化/反序列化名称

ej83mcc0  于 2022-11-09  发布在  Java
关注(0)|答案(2)|浏览(185)

当在java中使用jackson时,我希望能够为序列化和反序列化的json对象使用不同的名称。更具体地说:我正在从一个API获取数据,该API在其JSON属性上使用一个名称标准,但我的端点使用另一个名称标准,在本例中,由于我只想传递数据,因此我希望能够将属性转换为我的名称标准。
我在这里读到过类似的问题,但我似乎就是不能让它工作。

private String defaultReference;

@JsonProperty(value = "default_reference", access = JsonProperty.Access.WRITE_ONLY)
public void setDefaultReference(String defaultReference)
{
    this.defaultReference = defaultReference;
}

@JsonProperty(value = "defaultReference", access = JsonProperty.Access.READ_ONLY)
public String getDefaultReference()
{
    return defaultReference;
}

这是我最新的尝试。问题是它总是返回null,所以没有使用setter。
我也试过:

@JsonProperty(value = "default_reference", access = JsonProperty.Access.WRITE_ONLY)
private String defaultReference;

@JsonProperty(value = "defaultReference", access = JsonProperty.Access.READ_ONLY)
public String getDefaultReference()
{
    return defaultReference;
}

这种方法是可行的。它可以反序列化default_reference。问题是在我的JSON响应中,我得到了default_referencedefaultReference。最好我只得到defaultReference
有没有人做过类似的事情,看看我所尝试的有什么问题?

5t7ly7z5

5t7ly7z51#

您的思路是正确的。下面是一个使用测试JSON文档的示例。

public static class MyClass {
    private String defaultReference;

    @JsonProperty(value = "default_reference")
    public void setDefaultReference(String defaultReference) {
        this.defaultReference = defaultReference;
    }

    @JsonProperty(value = "defaultReference")
    public String getDefaultReference() {
        return defaultReference;
    }

    public static void main(String[] args) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        MyClass instance = objectMapper.readValue("{\"default_reference\": \"value\"}", MyClass.class);
        objectMapper.writeValue(System.out, instance);
        // Output: {"defaultReference":"value"}
    }
}
mzmfm0qo

mzmfm0qo2#

另一个替代方案是

@JsonSetter("default_reference")
    public void setDefaultReference(String defaultReference) {
        this.defaultReference = defaultReference;
    }

    @JsonGetter("defaultReference")
    public String getDefaultReference() {
        return defaultReference;
    }

相关问题