用杰克逊重命名对象中的字段

时间:2018-06-06 15:39:13

标签: java jackson

我有JSON:

{"400" : "120Hz"} 

(实际上,我的JSON要复杂得多,而且基本上是巨大的)

我使用Jackson将数据映射到FrequencyDTO

public class FrequencyDTO {

    @JsonProperty("400")
    private String frequency;

    public String getFreqiency() {
        return this.frequency;
    }

    public void setFrequency(String frequency) {
        this.frequency = frequency;
    }
}

之后,我需要将此DTO发送到前端,但我希望它的字段是人类可读的,例如:{"frequency_value" : "120Hz"}

我想到的唯一一件事就是创造某种FrequencyFrontendDTO,例如:

public class FrequencyFrontendDTO {

    @JsonProperty("frequency_value")
    public String frequency;

    //getters and setters
}

并将其与FrequencyDTO映射。

有更清洁的方法吗?

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用DTO。在此answer中查看原因。

或者您可以使用@JsonView。从Jackson 2.9开始,您可以使用@JsonAlias,它仅用于反序列化。

答案 1 :(得分:1)

@JsonAlias反序列化属性中的所有别名。但序列化仅适用于给定的@JsonProperty

public FrequencyDTO() {

@JsonProperty("frequency_value")
@JsonAlias({"400"})
private String frequency;

public String getFreqiency() {
    return this.frequency;
}

public void setFrequency(String frequency) {
    this.frequency = frequency;
}

}