java - 仅在 java 序列化时重命名字段

标签 java json spring serialization annotations

我有一个名为 AddOnsSRO 的对象。仅在序列化时我希望更改该对象的字段名称。

尝试在 getter 方法上使用 @JsonProperty,但它给了我一个重命名的字段,即使在不涉及序列化的用法中也是如此。

public class AddOnsSRO {

    private String sideCar;
    private String sideCarCoverage;

    @JsonSerialize
    @JsonProperty("abc")
    public String getSideCar() {
        return sideCar;
    }

    public void setSideCar(String sideCar) {
        this.sideCar = sideCar;
    }

    @JsonSerialize
    @JsonProperty("xyz")
    public String getSideCarCoverage() {
        return sideCarCoverage;
    }

    public void setSideCarCoverage(String sideCarCoverage) {
        this.sideCarCoverage = sideCarCoverage;
    }
}

仅在序列化时以下字段:sideCarsideCarCoverage 必须重命名为 abc分别为 xyz

对于除序列化之外的任何其他用途,字段名称应仅为 sideCarsideCarCoverage

请提供帮助并提出相应的更改或注释建议。

最佳答案

仅影响序列化使用 @JsonGetter而不是@JsonProperty

@JsonGetter("abc")
public String getSideCar() {
    return sideCar;
}

Getter means that when serializing Object instance of class that has this method (possibly inherited from a super class), a call is made through the method, and return value will be serialized as value of the property.

您可以将@JsonSetter添加到setter方法中进行反序列化:

@JsonSetter("sideCar")
public void setSideCar(String sideCar) {
    this.sideCar = sideCar;
}

关于java - 仅在 java 序列化时重命名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54434294/

相关文章:

java - 序列化热点状态

java - 返回数据库中是否存在用户

json - kubernetes 无法在全新安装的 CoreOS 上连接

c# - 如何让 JavaScriptSerializer 将子对象视为普通的旧字符串?

java - 实现 hashCode 和 equals 方法但类是最终的

java - itext 保护 pdf 不被修改

json - JDBC、Elasticsearch 和 Postgresql Json 数据类型

java - 生产与登台 - 添加登台特定 Controller

java - 为什么@Transactional 不能与@Autowired EntityManagerFactory 一起工作?

java - 如何清理 thymeleaf 模板的 json 输出?