본문 바로가기

Spring

[Spring] Request DTO 직렬화 / 역직렬화 시 PropertyNamingStrategy

반응형
package com.demo.app.api.chat.dto;

import com.demo.app.api.chat.enums.ChannelType;
import com.demo.app.api.chat.enums.ChatRegion;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class PhotonRequest {
    private String AppId;
    private String AppVersion;
    private ChatRegion Region;
    private ChannelType ChannelType;
    private String  ChannelName;
}

Spring에서 Request Dto를 만들다보면

"머고..? 왜 값이..?" 이런 경우가 간혹 있습니다.

"아~~~이거 ~~~~ 먼지 아는디~~~" 하고 맨날 기억을 못함 ㅠㅠ

 

디테일한 내용은 다른 블로그에도 잘 정리되어있습니다.

간략히 남기자면?

Jackson?에서 기본으로 직렬화/역직렬화 시 기본 네이밍 전략이 있어서, 요청을 보낼 때 프로퍼티 값을 

{
    "AppId": "Yanolja"
}​

같은 방식으로 전송하면 실제로는

{
   "appId": "Yanolja"
}

와 같은 방식으로 바뀌고 DTO에서 못받는다?는 내용입니다.

(좀더 디테일하게 설명하자면, Getter 메소드 기준으로 jackson이 Json key를 생성하는 부분과,

롬복의 Getter Setter 생성방식등이 복잡하게 얽혀있습니다.)

 

@JsonNaming(PropertyNamingStrategies.UppserCamelCaseStartegy.class) 로 지정해서,

내가 지금 DTO로 보내고 있는 프로퍼티 네이밍이 'UpperCamelCase'임을 지정해 줘야 한다는것이지요.

참고자료 : Naming convention (programming) - Wikipedia

 

 

'Spring Request Dto null 나오는 이유' 라고 검색 할 시 나오는 대표적인 내용이기도 하고,

가장 먼저 의심해봐야 하는 증상 들 중 하나이기도 합니다.

반응형

'Spring' 카테고리의 다른 글

Spring testcontainer  (0) 2022.09.26