Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 패스트캠퍼스
- JavaScript
- 카프카
- 스파르타코딩클럽
- EC2
- 남궁성과 끝까지 간다
- 시큐리티
- visualvm
- docker
- 데이터베이스
- WEB SOCKET
- AWS
- 웹개발
- Spring
- 쇼트유알엘
- DB
- MYSQL
- 생성자 주입
- CentOS
- Spring Security
- java
- Kafka
- JWT
- 스프링의 정석
- 개인프로젝트
- 항해99
- @jsonproperty
- 스웨거
- 프로그래머스
- emqx
Archives
- Today
- Total
Nellie's Blog
[Springboot] 카멜케이스로 코드를 작성했는데 스네이크케이스로 요청이 온다면? (@JsonProperty, @JsonNaming) 본문
Back-end/Spring
[Springboot] 카멜케이스로 코드를 작성했는데 스네이크케이스로 요청이 온다면? (@JsonProperty, @JsonNaming)
Nellie Kim 2024. 7. 12. 17:50728x90
카멜케이스로 코드를 작성했는데 스네이크케이스로 요청이 온다면 어떻게 할까?
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;
}