杰克逊:使用不同的属性名称序列化/反序列化

时间:2015-11-10 09:32:42

标签: java json serialization jackson

我有这个POJO:

public class SetPoint {

    private String tagName;
    //more fields

   //getters and setters

}

我从REST API获取SetPoints,对它们执行某些操作然后再次发送它们。问题是我想从JSON反序列化SetPoint,如:

{
    "tagnameOpc" : "6GH783",
    //more fields
}

但是当我发送它们时,我想将SetPoint序列化为:

{
    "tagName" : "6GH783"
    //more fields
}

我的意思是,我希望在每种情况下将属性tagName命名为不同。

这可能吗?

3 个答案:

答案 0 :(得分:6)

尝试为getter和setter使用不同的JsonProperty注释。 E.g。

@JsonProperty("tagnameOpc")
void setTagName(String name)

@JsonProperty("tagName")
String getTagName()

如果不起作用,请尝试使用额外的setter

@JsonIgnore
void setTagName(String name)

@JsonProperty("tagnameOpc")
void setTagNameOpc(String name) {
    setTagName(name);
}

@JsonProperty("tagName")
String getTagName()

答案 1 :(得分:1)

杰克逊mix-in annotations可能有帮助。

您将使用jQuery(".regular + .regular").html(data); 类两次,但为每个序列化/反序列化格式编写不同的混合类,然后针对每种情况单独配置ObjectMapper。

答案 2 :(得分:0)

假设jsonObject是一个包含json的JSONObject:

jsonObject.put("tagName", jsonObject.remove("tagnameOpc"));

JSonObject documentationjsonObject.remove(key)返回与该键关联的值,如果没有值,则返回null。