본문 바로가기
Back/Spring Boot

@RequestBody DTO json데이터가 null일 때

by 은z 2024. 2. 7.

문제 상황

ajax로 JSON 데이터를 BODY에 담아 POST API로 전달할 때, 

controller 단에 매핑하는 객체DTO의 값이 계속 null 인 상황이 발생했다.

 

넘겨줄 JSON 데이터

{
	"seq" : "1",
	"name" : "홍길동"
}

 

받을 DTO 클래스

@Getter	// lombok 사용
public class insertDto {

    private Long seq;
    private String name;
    
}

 

위 코드를 확인해보아도, RequestBody 매핑하기 위한 규칙을 모두 지킨 것을 볼 수 있다.

1. 객체의 필드명과 Json 데이터의 이름이 동일하다.

2. Getter와 기본생성자가 DTO 클래스에 있다.

 

 

📣참고!

Spring Boot가 JSON을 매핑하는 구현체로 Jackson 라이브러리를 사용한다. 정확히는 Jackson의 ObjectMapper !

스프링부트 스타터에 포함되어 있는 jackson라이브러리가 있어서 JSON을 Java Object로 변환할 수 있다.
Jackson은 Post요청시 Jackson2HttpMessageConverter이 데이터를 처리하는데  내부적으로 ObjectMapper를 사용한다.
ObjectMapper 는 기본생성자와 public getter 혹은 setter 혹은 public field를 보고 property명을 찾는다.
그래서 기본생성자와 getter만 있어도 prorperty명을 찾아 값을 주입시켜주는 것이다.

 

 

 

내 경우의 에러가 진짜 뭐가 문제인지 모르겠어서 한참 해멨다.

 


해결

에러의 원인이 무엇인지 결론부터 말하자면,

@RequestBody 의 어노테이션 import를 잘못했다...

swagger 관련 어노테이션을 import함...

 

객체 mapping을 위한 어노테이션은 

org.springframwork.web.bind.annotation 경로에 있는 것을 import 해야 된다.

 

 

 

 

 

 

결론

그래도 이번에 왜 자꾸 객체를 null로 받는 것인지 원인이 무엇인지 찾으면서,

jackson ObjectMapper 에 대해 다시 한 번 공부했고, @RequestBody 에 대해 좀 더 깊게 알아볼 수 있었다!

 

📌 나처럼 어이없는 실수를 한 분들이 있다면, 도움 되길 바란다.🥲

댓글