@JsonProperty & @JsonNaming

수정이·2022년 5월 6일
0

Spring

목록 보기
1/16
post-thumbnail

POST API와 PUT API를 사용할 때 Json을 통해서 RequestBody를 받게 된다.
Json에서는 Snake Case방식을 사용하고, Java에서는 Camel Case를 사용한다.
둘의 변수 네이밍 방식이 다르기 때문에 Java에서 Json을 받거나 보낼때 제대로 받지 못하는 상황이 발생한다. 그렇지만 스프링 부트에서는 어노테이션을 사용하여 이를 해결할 수 있다.

예시


  • Java에서 아래와 같이 DTO를 선언했다고 하자.
# UserDto.java
private String name;
private int age;
private List<CarDto> carList;
# CarDto.java
private String name;
private String carNumber;
  • Json에서 아래와 같이 RequestBody를 보낸다고 하자.
{
    "name" : "steve",
    "age" : 20,
    "car_list" : [
        {
            "name" : "BMW",
            "car_number" : "11가 1234"
        },
        {
            "name" : "A4",
            "car_number" : "22가 3456"
        }
    ]
}
  • Client가 Json을 날려 Server에서 받으면 다음과 같이 받게 될 것이다.
    • car_list와 car_number의 변수 네이밍이 달라서 문제가 발생한다.
name='steve',
age=20,
carList=null

@JsonProperty


  • 하나의 변수를 네이밍 해줄 때 사용한다.
    • @JsonProperty를 사용하면 carNumber는 car_number라는 키 값을 내려받는다.
@JsonProperty("car_number")
private String carNumber;

@JsonNaming


  • 새로 네이밍할 변수의 개수가 적다면 @JsonProperty를 사용해도 상관없겠지만, 만약 1억개의 변수를 새로 네이밍해야한다면 시간이 아주 많이 소모될 것이다.
  • @JsonNaming는 클래스에 사용하여 전체 멤버변수를 새로 네이밍 해준다.
    • value에 원하는 case 전략클래스를 입력하면 된다.
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserDto {
    private String name;
    private int age;
    private List<CarDto> carList;
profile
공부는 꾸준히... 글쓰기도 꾸준히...

0개의 댓글