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

mun*_*ger 5 java serialization json jackson deserialization

我希望在 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;
}
Run Code Online (Sandbox Code Playgroud)

这是我最近的尝试。这样做的问题是它总是返回 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;
}
Run Code Online (Sandbox Code Playgroud)

这种作品。它可以反序列化default_reference。问题是在我的 JSON 响应中我同时得到default_referencedefaultReference。最好我只会得到defaultReference.

有没有人做过类似的事情并看看我所尝试的有什么问题?

ck1*_*ck1 5

你走在正确的轨道上。以下是使用测试 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"}
    }
}
Run Code Online (Sandbox Code Playgroud)