https://songkg7.tistory.com/81
위의 게시글을 그대로 가져왔습니다..
영화 정보를 가져오는 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 내부에서 관리되도록 전환되고 약간의 구조가 수정된 것처럼 보인다.
항상 변화에 민감하게 대처하여 어떻게 변하더라도 최적의 코드 스타일을 유지하도록 하자.
'공부 > Spring' 카테고리의 다른 글
서버사이드 렌더링, 클라이언트 사이드 렌더링 (0) | 2024.11.25 |
---|---|
웹 어플리케이션의 의해 (1) | 2024.11.25 |
@NotFound (0) | 2024.11.20 |
JPA 연관관계 정리 (0) | 2024.07.26 |
@Transactional (0) | 2024.06.01 |