Altiora Petamus

@JsonNaming 사용 (springboot 2.5.3 ~) 본문

Java/Spring Framework

@JsonNaming 사용 (springboot 2.5.3 ~)

Haril Song 2021. 8. 4. 13:18

영화 정보를 가져오는 OMDb API 를 사용해보던 중에 DTO로 정보를 처리하고 있었다.

이 과정에서 약간의 문제가 있었는데, 평소 나는 camelCase 방식을 사용하여 프로젝트를 작성하지만 api에서는 앞글자를 대문자로 JSON 데이터를 제공하고 있다.

{
  "Title": "Frozen",
  "Year": "2013",
  "Type": "movie",
  "Poster": "https://m.media-amazon.com/images/M/MV5BMTQ1MjQwMTE5OF5BMl5BanBnXkFtZTgwNjk3MTcyMDE@._V1_SX300.jpg",
  "imdbID": "tt2294629"
}
private String title;
private String year;
private String imdbId;
private String type;
private String poster;

만약 변수명을 json 데이터와 일치시키지 않으면 데이터에 값이 들어가지 않는다.

이때 @JsonProperty(value) 를 사용하면 프로젝트 안에서의 변수명을 바꾸지 않고 데이터를 매핑할 수 있다. 하지만 @JsonProperty(value) 는 필드에 작성해야하므로 과하게 많은 어노테이션을 작성하게 될 수도 있는데, 이럴 때 클래스 레벨에 작성할 수 있는 어노테이션이 존재한다.

바로 @JsonNaming 이다.

@JsonNaming

Deprecated - since 2.12

@Data
@JsonNaming(value = PropertyNamingStrategy.UpperCamelCaseStrategy.class)
public class MovieInfo {

    private String title;
    private String year;

    @JsonProperty("imdbID")  // 필요한 부분에만!
    private String imdbId;
    private String type;
    private String poster;

}

예전엔 이렇게 사용했지만 최근 확인해보니 deprecated 되어 다른 방법을 권장하고 있다.

대부분이 Deprecated 된 모습

Usage

@JsonNaming(value = PropertyNamingStrategies.UpperCamelCaseStrategy.class)

예전과 달리 PropertyNamingStrategies 라는 추상 클래스에서 호출한다.

내용을 좀 들여다보면, NamingBase 라는 추상 클래스가 PropertyNamingStrategy 를 상속하고 있고 NamingBase 는 각각의 전략에 상속되고 있다.

class 내부에서 관리되던 전략들이 abstact class 내부에서 관리되도록 전환되고 약간의 구조가 수정된 것처럼 보인다.

항상 변화에 민감하게 대처하여 어떻게 변하더라도 최적의 코드 스타일을 유지하도록 하자.

'Java > Spring Framework' 카테고리의 다른 글

다양한 HTTP Mapping 2  (0) 2021.07.31
다양한 HTTP Mapping 1  (0) 2021.07.28
in-memory DB 구현  (0) 2021.06.30
Spring Security 사용하기 1  (0) 2021.06.26
Spring Security란?  (0) 2021.06.19