Jackson 라이브러리
[Spring] Jackson 라이브러리 이해하기.
안녕하세요. 오늘은 Spring 프레임워크에 빼놓을 수 없는 라이브러리중 하나인 Jackson에 대해 간단하게 포스팅 합니다.주의!! 해당 포스팅은 Jackson의 라이브러리 2.9.7 버전을 다룹니다.또한, 프로젝
mommoo.tistory.com
Jackson 라이브러리의 필요성
API 통신을 하다 보면 대부분 JSON 형태로 데이터를 주고받는다.
이때, FE와 BE가 서로 파라미터 작성 방식(카멜케이스, 스네이크케이스) 또는 파라미터 명이 다를 경우 데이터가 원활하게 파싱이 안될 수 있다.
카멜 케이스(CamelCase) vs 스네이크 케이스(snake_case)
카멜 케이스(Camel Case)
첫 글자는 소문자로, 중간 글자들은 대문자로 시작하는 표기법
memberId, memberName, memberPhoneNumber
스네이크 케이스(Snake Case)
첫 글자는 소문자로, 중간 글자들은 언더바(_)가 포함되는 표기법
member_id, member_name, member_phone_number
이 때 Jackson 라이브러리의 어노테이션을 사용하여 이를 매핑해줄 수 있다.
public class Product {
private int id;
private String name;
private int price;
private String description;
private int categoryId;
}
위와 같은 객체를 snake case로 전달해주고 싶은 경우를 예시로 들어보겠다.
@JsonProperty
@JsonProperty 어노테이션은 객체를 JSON 형식으로 변환할 때 Key의 이름을 설정할 수 있다. (객체 하나하나 각각 지정)
하나하나 지정해야 하므로 새로 네이밍할 필드의 개수가 1~2개 정도일 경우에 사용한다.
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
private int id;
private String name;
private int price;
private String description;
@JsonProperty("category_id")
private int categoryId;
}
@JsonNaming
새로 네이밍할 필드의 개수가 전체 필드의 반 이상 등 너무 많을 경우에 사용한다.
@JsonNaming 어노테이션은 클래스에 사용하여 전체 멤버변수를 새로 네이밍 해준다.
- value에 원하는 case 전략클래스를 입력하면 된다.
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class Product {
private int id;
private String name;
private int price;
private String description;
private int categoryId;
}
결과
2가지 어노테이션 모두 카멜 케이스로 요청을 보냈지만 스네이크 케이스로 잘 매핑이 되어 온 모습을 확인할 수 있다.
참고
@JsonNaming에 대한 간단한 설명
java에서 jackson라이브러리를 사용하여 Json DTO에 프로퍼티들의 표기법을 변경할 수 있다이 DTO를 보면 카멜케이스로 작성되어 있는 Json data를 받는 dto인데 아래와 같은 컨트롤러에서 Json 데이터로
velog.io
@JsonProperty, @JsonNaming 정리
API 통신을 하다 보면 대부분 JSON 형태로 데이터를 주고받는다. 이때, 서로 파라미터 작성 방식(카멜케이스,스네이크케이스) 또는 파라미터 명이 다를 경우 데이터를 파싱 하는 도중에 에러 또는
dev-jwblog.tistory.com
Alternatives for PropertyNamingStrategy.SNAKE_CASE or PropertyNamingStrategy.SnakeCaseStrategy as it is deprecated now
In prior versions of jackson, we were using the following two ways to modify the Property Naming during serialization and deserialization of objects. First way: Mentioning the following annotation on
stackoverflow.com
@JsonProperty & @JsonNaming
@JsonProperty 와 @JsonNaming에 대해서 작성
velog.io
'프레임워크 > Spring Boot' 카테고리의 다른 글
[Spring] DO(Entity), DTO (0) | 2024.05.16 |
---|---|
[Spring Boot] HttpMediaTypeNotAcceptableException 에러 해결 (0) | 2024.05.14 |
[JAVA] Iterator & Foreach (0) | 2024.05.10 |
[JAVA] 배열 vs 리스트 (0) | 2024.05.10 |
[JAVA] 로그 & 로그 레벨 (Log Level) (0) | 2024.05.10 |