일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- algorithm
- Spring
- java
- 2018 KAKAO BLIND RECRUITMENT
- 라이브템플릿
- 2981
- counting elements
- BFS
- API
- Greedy
- 소수
- codility
- spring security
- applicationeventpublisher
- beandefinitionstoreexception
- Python
- 문자열
- springboot
- 백준
- Dijkstra
- error
- brute force
- 탐욕법
- 파이썬
- javascript
- 최단경로
- HTTP
- 알고리즘
- 코딩테스트
- 프로그래머스
Archives
- Today
- Total
Altiora Petamus
@JsonNaming 사용 (springboot 2.5.3 ~) 본문
영화 정보를 가져오는 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 되어 다른 방법을 권장하고 있다.
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 |