[Spring] Json Type Request를 받는 @JsonProperty와 @JsonNaming

김우진·2021년 11월 9일
0

Spring & Spring Boot

목록 보기
3/9
post-custom-banner

RestAPI가 유명해지고 많이 사용하면서 Client-Server간에 Json 형식으로 데이터를 주고 받는 경우가 많아졌다. 이 경우 Database와 Java 사이의 패러다임이 다른 것과 비슷하게 Json 방식과 Java 방식이 다르다. 예를 들어, Json의 기본 표기법은 'snake_case'인 반면에 Java의 기본 표기법은 'camelCase'이다. 이를 해결하는 방법 중 하나로 @JsonProperty 어노테이션 사용법이 있다.

@JsonProperty

@JsonProperty는 Json 안의 property 이름을 나타내기 위한 어노테이션이다.

@Data
public class Student {
    
    @JsonProperty("my_name")
    private String myName;
    
    @JsonProperty("my_age")
    private String myAge;
    
    @JsonProperty("my_country")
    private String myCountry;
    
}

위처럼 Java의 Json 데이터를 매핑할 객체의 field에 어노테이션을 사용해서 표시한 경우, "my_name"으로 들어온 Json property 값이 "myName" field 값으로 매핑될 수 있다.

하지만, 만약 field가 50개, 100개 처럼 많은 경우 일일이 @JsonProperty를 붙이는 것은 비효율적이다. 이럴 때 사용하는 것이 @JsonNaming이다.

@JsonNaming

@Data
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Student {
    
    private String myName;
    private String myAge;
    private String myCountry;
    
}

이렇게 class 자체에 @JsonNaming으로 하고 Naming 전략을 선택하면 그에 따른 매핑을 해준다. 위 코드에선 모든 field가 snake_case로 매핑된다.

출처

  1. Spring Baeldung : jackson-annotations의 @JsonProperty
  2. huihui님의 blog : [Spring] 스네이크 케이스로 받은 JSON 데이터를 객체 내 케멀케이스 변수에 매핑시키는 방법은 무엇일까?
post-custom-banner

0개의 댓글