【问题标题】:Rename fields in object with Jackson用杰克逊重命名对象中的字段
【发布时间】:2018-06-06 15:39:12
【问题描述】:

我有 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

有更清洁的方法吗?

【问题讨论】:

    标签: java jackson


    【解决方案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;
    }
    

    }

    【讨论】:

      【解决方案2】:

      我强烈建议您使用 DTO。在answer 中了解原因。


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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-30
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        • 2015-11-23
        • 2020-09-28
        相关资源
        最近更新 更多