-
@RequestParam과 @RequestBody의 차이점프로젝트/Trend-Pick 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의 차이점을 제대로 인지하지 못하고 사용했기 때문에 이와 같은 상황이 발생했을 때 바로 해결하지 못하고 시간을 지체한 것이라고 생각한다.
많이 사용하는 메서드, 애노테이션일 수록 그 의미와 기능을 잘 숙지하고 사용하는 것이 중요하다는 것을 알게 되었다.
'프로젝트 > Trend-Pick' 카테고리의 다른 글
AWS S3를 이용한 사진 저장 (0) 2023.07.31 자바 코드로 정렬 vs db에서 특정 값을 정렬해서 select (0) 2023.07.28 비어있을 수도 있는 객체의 조회 -> Optional 사용 (0) 2023.07.27 로그인 세션으로 자동 CRUD (0) 2023.07.12 연관관계 사이의 무한 호출 (0) 2023.07.11