728x90
카멜케이스로 코드를 작성했는데 스네이크케이스로 요청이 온다면 어떻게 할까?
Jackson 라이브러리에서 제공하는 ObjectMapper 객체는 어노테이션으로 @JsonProperty와 @JsonNaming 을 제공해준다.
Snake Case 데이터를 받아, Camel Case 변수에 데이터를 바인딩 해준다.
스네이크케이스 말고도, 케밥케이스 등 많은 데이터와 매핑하는 기능을 제공한다.
예제로 실습을 해보자.
컨트롤러
@PostMapping("/test/test")
public TestDto testTest(@RequestBody TestDto testDto) {
return testDto;
}
포스트맨 요청
스네이크 케이스로 데이터를 post한다.
post) http://localhost:8080/api/member/test/test
{
"test_data": "test~",
"test_data2":"test2~~"
}
@JsonNaming을 붙이기 전과 후다. 붙이기 전에는 매핑이 되지 않고 null로 반환된다.
이렇게 필드 하나하나 수동으로 지정해도 된다.
TestDto
매핑하려는 Dto는 카멜케이스로 작성되어 있다.
@Data
public class TestDto {
private String testData;
private String testData2;
}
포스트맨 호출을 하니 당연히 매핑이 안되고 null 이 나온다.
@JsonNaming
이제 objectMapper가 제공하는 @JsonNaming 어노테이션을 사용해보자.
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
이 한 줄만 Dto 위에 붙여주면 스네이크 케이스로 요청이 와도 알아서 다 매핑이 된다!
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Data;
@Data
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) // 🎯 이거 한줄만 붙여주면 된다!!
public class TestDto {
private String testData;
private String testData2;
}
@JsonProperty
@JsonProperty를 사용하여 key를 매핑시켜줄 수 있다. 이렇게 하면 코드가 길어질 우려가 있어서 @JsonNaming 쓰는 것을 추천한다!
@Data
//@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class TestDto {
@JsonProperty("test_data") // 🎯 추가
private String testData;
@JsonProperty("test_data2") // 🎯 추가
private String testData2;
}