Post

Java Jackson 필드 이름 변경

1. 직렬화 필드명 변경

단순 엔터티 작업이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MyDto {
    private String stringValue;

    public MyDto() {
        super();
    }

    public String getStringValue() {
        return stringValue;
    }

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

직렬화하면 다음 JSON이 생성된다.

1
{"stringValue":"some value"}

stringValue 대신에 strVal을 얻도록 해당 출력을 사용자 정의하려면 간단히 getter에 주석을 달아야 한다.

1
2
3
4
@JsonProperty("strVal")
public String getStringValue() {
    return stringValue;
}

이제 직렬화 시 원하는 출력을 얻을 수 있다.

1
{"strVal":"some value"}

간단한 단위 테스트를 통해 출력이 올바른지 확인한다.

1
2
3
4
5
6
7
8
9
10
11
12
@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"));
}

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.