상황
스프링부트로 백엔드 개발을 진행 중이다. 클라이언트가 게시물을 작성하고 글을 저장 버튼을 눌렀다.
데이터가 담긴 Json 객체를 전달했다. 그리고 나는 에러폭격을 받았다.🥲
문제
서버에서 에러가 발생했다. 에러 내용은 null이면 안되는 값에 null이 들어가고 데이터베이스에 insert 했다는 내용이었다.
나의 서버 코드는 다음과 같았다. 어디가 문제일지 한번 생각해보자. (사실 제목에 답이 있다.)
@RequiredArgsConstructor
@RequestMapping("/api/v1/posts")
@RestController
public class PostsController {
private final PostsService postsService;
@PostMapping("")
private Long savePost(PostSaveRequestDto postSaveRequestDto) {
return postsService.save(postSaveRequestDto);
}
}
원인
savePost라는 메소드의 파라미터로 PostSaveRequestDto 가 전달되는게 나의 목표였다.
그때 나의 생각은 "@RestController로 어노테이션을 선언했으니까 @RequestBody안써도 된다고 했던거 같은데 ~" 였다.
그리고 이것이 내 코드 상 문제가 되었다.
해결방안
완전 잘못된 생각이었다. @RestController는 @Controller + @ResponseBody 가 되어 각 메소드에 @ResponseBody 어노테이션이 선언된 효과(?)를 준다. 그래서 나는 파라미터로 전달한 PostSaveRequestDto에 @RequestBody 어노테이션을 추가했다.
바보같은 실수구나! 스프링을 처음 부터 다시 공부해라,,
배운점/기억할점
- @RestController는 @Controller + @ResponseBody 이다.
'Backend > SPRING' 카테고리의 다른 글
(추가중)😱맨날 마주치는 blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource (0) | 2021.07.01 |
---|