일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- git pull
- git
- vmware workstation player
- 소비통장
- 취성패
- window11 Education
- IAMPORT
- git 설정
- window11
- 티스토리챌린지
- 런던뮤지컬
- 자바
- ObjectMapper
- 방통대
- 정처기
- 방송대
- camel case
- window10 Education
- 윈도우10 Education
- snake case
- git pull --rebase
- 취업
- json string
- 운영체제
- java
- 아임포트
- Spring Boot
- github
- 오블완
- window10
- Today
- Total
홍차의 미로찾기
JAVA 객체를 camel case나 snake case로 변경 (1) 본문
Spring Boot에서 클라이언트로부터 json 형식으로 데이터를 주고받을 때, key의 naming을 설정해야 한다.
보통 초기에 어떤 형식을 사용할 것인지 정하고 시작하기도 하지만
개발을 하다보면 형식을 자유롭게 넘나들어야 할 때가 있다.
이 글에서는 camel case로 받고, snake case json String으로 전달하는 방법에 대해 작성했다.
만약 snake case json String이 아닌, snake case 객체로 전달하는 방법을 알고싶다면 2편을 참고하면 도움이 될 것이다.
2022.01.04 - [프로그래밍/SPRING 입문] - JAVA 객체를 camel case나 snake case로 변경 (2)
나 같은 경우는 클라이언트로부터 camel case로 받고, db로 전달할 때는 snake case json String으로 전달해줘야하는 경우가 있었다.
처음에는 @JsonNaming과 @JsonProperty를 사용하려고 했는데 같은 객체에 대해서 요청과 응답을 다르게 설정할 수 없다는 단점이 있었다.
즉, @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class) 이러한 어노테이션을 class에 설정한다면
파라미터를 받을 때도, 응답으로 보낼때도 snake case로 할 수 밖에 없었다.
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
public class User{
private String userId;
private String userName;
}
위와 같은 설정은 user_id 나 user_name을 키값으로 요청을 받고, 응답을 보낼 수 있지만
user_id / user_name으로 요청을 받고, 다시 userId / userName 형태의 json string으로 응답을 보내거나 할 수 없다.
하지만! 구글링으로 좀 더 찾아보니 jackson의 ObjectMapper 를 사용하면 손쉽게 변경할 수 있었다.
jackson을 사용하기 위해서는 dependencies를 추가해야한다.
다만, spring boot을 사용하고 있다면 따로 추가할 필요는 없다.
jackson의 ObjectMapper 객체를 사용해서 네이밍을 변경해보자
1) camel case 객체 -> snake case JSON 문자열
//요청
[POST] localhost:8080/test
application/json
{
"userName" : "testname",
"userId" : "testid"
}
//코드
package com.example.excepTest.JsonTest;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class JsonDTO {
private String userName;
private String userId;
}
package com.example.excepTest.JsonTest;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class JsonController {
@PostMapping("/test")
@SneakyThrows
public void test(@RequestBody JsonDTO req) {
System.out.println(req); //JsonDTO(userName=testname, userId=testid)
ObjectMapper objectMapper = new ObjectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
System.out.println(objectMapper.writeValueAsString(req));//{"user_name":"testname","user_id":"testid"}
}
}
요청은 camel case로 보냈고
camel case로 된 객체를 snake case의 json String 으로 변환했다.
ObjectMapper 를 이용해서 객체를 String 형태로 변환할 수 있는데
이때 ObjectMapper의 naming 형식을 snake로 바꾸면 json String을 snake case로 설정할 수 있다.
ObjectMapper objectMapper = new ObjectMapper() .setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
'프로그래밍 > SPRING 입문' 카테고리의 다른 글
[spring boot] java Spring boot로 아임포트(iamport) 결제 구현 (0) | 2022.01.08 |
---|---|
JAVA 객체를 camel case나 snake case로 변경 (2) (0) | 2022.01.04 |
[아임포트] 아임포트(iamport) 결제 연동 (1) - HTML/JAVASCRIPT (3) | 2022.01.03 |