1. 概述

本文我们向大家演示使用Jackson序列化对象时,如何修改JSON字段名称

如果你想进入一步深入学习Jackson,请点击我们的Jackson教程

2. 自定义JSON字段名

假设我们的实体类如下:

public class MyDto {
    private String stringValue;

    public MyDto() {
        super();
    }

    public String getStringValue() {
        return stringValue;
    }

    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }
}

默认序列化结果为:

{"stringValue":"some value"}

现在我们想把 stringValue 修改为 strVal,我们只需要在getter方法上增加@JsonProperty这个注解即可:

@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"));
}

总结

将实体对象序列化为指定JSON格式的数据,是一种很常见的需求。本文我们简单演示了如何使用 @JsonProperty 注解来实现这一任务。

本文用到的示例可以在 GitHub 上找到。