【问题标题】:Rename field only on Serialization in java仅在 java 中的序列化上重命名字段
【发布时间】:2019-01-30 06:10:46
【问题描述】:

我有一个名为 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;
    }
}

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

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

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

【问题讨论】:

  • 你在使用 jackson 库吗?
  • @AkinerAlkan 是的
  • 或许你可以试试@JsonAlias
  • @AkinerAlkan 我在哪里使用这个...请建议更新代码
  • 您所说的“即使在用法上也给我一个重命名的字段”是什么意思? AddOnsSRO x; x.getSideCar(); 不起作用?

标签: java json spring serialization annotations


【解决方案1】:

为了只影响序列化使用@JsonGetter 而不是@JsonProperty

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

Getter是指当序列化具有该方法的类的Object实例时(可能继承自超类),通过该方法进行调用,返回值将被序列化为该属性的值。

你可以在setter方法中添加@JsonSetter进行反序列化:

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

【讨论】:

  • @ankur43 添加反序列化值
  • @ankur43 添加@JsonSetter 回答
【解决方案2】:

您的代码看起来不错...请升级您的 jackson 库...如果您使用的是旧代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2019-07-11
    • 2014-03-08
    • 2017-01-12
    • 2021-12-11
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多