반응형
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 |
---|