프로젝트/Trend-Pick
@RequestParam과 @RequestBody의 차이점
chanhee01
2023. 7. 22. 17:42
@PostMapping("/create_post") // 글쓰기 페이지에서 저장을 누르는거
public CreatePostResponse savePost(@RequestParam CreatePostDto createPostDto) throws Exception {
Member member = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
Post post = new Post(member, createPostDto.getTitle, createPostDto.getContent, LocalDateTime.now());
Long postId = postService.savePost(post);
if (imgInPost != null) {
postImgService.save(createPostDto.getImgInPost, post);
}
return new CreatePostResponse(postId);
}
처음에는 @RequestParam으로 Dto를 받아와서 postman으로 결과를 관찰하려 했었다.
Dto에는 title, content, imgInPost라는 변수가 들어있었고, 타입도 잘 맞았는데 400(Bad Requeset)에러가 계속 발생했었다.
오류의 이유는 @RequestParam은 Dto로 받아오지 못하기 때문이다.
Dto로 받아오고 반환을 하기 위해서는 @RequestBody를 사용해야 한다.
복잡한 데이터 : @RequestBody에서 Dto를 사용한 데이터 전달
간단한 데이터 : @RequestParam을 통한 요청, 응답
하지만 사진을 보내는 것은 @RequestParam을 통해서만 접근이 가능하기 때문에 @RequestParam으로 title, content, imgInPost를 잘 받아올 수 있었다.
@PostMapping("/create_post") // 글쓰기 페이지에서 저장을 누르는거
public CreatePostResponse savePost(@RequestParam String title,
@RequestParam String content,
@RequestParam(required = false) MultipartFile imgInPost) throws Exception {
Member member = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
Post post = new Post(member, title, content, LocalDateTime.now());
Long postId = postService.savePost(post);
if (imgInPost != null) {
postImgService.save(imgInPost, post);
}
return new CreatePostResponse(postId);
}
위와 같이 하나씩 파라미터로 받아오는 것으로 해결했다.
별거 아닌 문제였지만 '400에러'라고만 표시되기 때문에 어떤 부분이 잘못된 지 몰라서 해결하기 어려웠다.
결국 @RequestParam과 @RequestBody의 차이점을 제대로 인지하지 못하고 사용했기 때문에 이와 같은 상황이 발생했을 때 바로 해결하지 못하고 시간을 지체한 것이라고 생각한다.
많이 사용하는 메서드, 애노테이션일 수록 그 의미와 기능을 잘 숙지하고 사용하는 것이 중요하다는 것을 알게 되었다.