java
스네이크 케이스를 카멜 케이스로 Mapping 시키는 방법

스네이크 케이스를 카멜 케이스로 Mapping 시키는 방법

openapi 를 사용하는데, 어떤 key는 스네이크 케이스고, 어떤 값은 카멜 케이스고 섞여있는 경우가 있어서 이를 모두 카멜케이스로 맵핑하는 방법을 찾아보았다

예시를 보자

// 일부 내용 생략
var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
 
if (response.statusCode() == HttpStatus.OK.value()) {
    return new ObjectMapper()
            .readValue(response.body(), StepByStepAddressInquiryResponseDto.class);

위와 같이 외부 API를 호출하였는데, response 가 json 이고 내부 키가 카멜 케이스와 스네이크 케이스가 섞여있다 이를 일반적으로 바로 ObjectMapper() 를 사용해서 바로 카멜 케이스 형식으로 만들어진 JAVA POJO 클래스에 맵핑하려고 하면 실패하게 된다

이를

@JsonProperty("y_coor")
private String yCoor;

와 같이 @JsonProperty() 어노테이션을 이용하면 문제 없이 맵핑 가능하다 아래는 @JsonProperty() 가 적용된 전체 DTO 예시이다

StepByStepAddressInquiryResponseDto.java
@Data
public class StepByStepAddressInquiryResponseDto {
 
    private String id;
    private List<ResultDto> result;
    private String errMsg;
    private int errCd;
    private String trId;
 
    /**
     * openapi 규격에 맞추기 위해서 스네이크 케이스로 들어오는 내용을 @JsonProperty 로 맞춰줬습니다
     */
    @Data
    public static class ResultDto {
        @JsonProperty("y_coor")
        private String yCoor;
 
        @JsonProperty("full_addr")
        private String fullAddr;
 
        @JsonProperty("x_coor")
        private String xCoor;
 
        @JsonProperty("addr_name")
        private String addrName;
 
        private String cd;
    }
 
}