Contents

Jackson更改字段名称

1. 概述

本快速教程说明了如何在序列化时更改字段名称以映射到另一个 JSON 属性。

2. 更改序列化字段名称

使用一个简单的实体:

public class MyDto {
    private String stringValue;
    public MyDto() {
        super();
    }
    public String getStringValue() {
        return stringValue;
    }
    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }
}

对其进行序列化将产生以下 JSON:

{"stringValue":"some value"}

要自定义该输出,而不是stringValue我们得到 - 例如 - strVal,我们需要简单地注释 getter:

@JsonProperty("strVal")
public String getStringValue() {
    return stringValue;
}

现在,在序列化时,我们将获得所需的输出:

{"strVal":"some value"}

一个简单的单元测试应该验证输出是否正确:

@Test
public void givenNameOfFieldIsChanged_whenSerializing_thenCorrect() 
  throws JsonParseException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    MyDtoFieldNameChanged dtoObject = new MyDtoFieldNameChanged();
    dtoObject.setStringValue("a");
    String dtoAsString = mapper.writeValueAsString(dtoObject);
    assertThat(dtoAsString, not(containsString("stringValue")));
    assertThat(dtoAsString, containsString("strVal"));
}