ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @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의 차이점을 제대로 인지하지 못하고 사용했기 때문에 이와 같은 상황이 발생했을 때 바로 해결하지 못하고 시간을 지체한 것이라고 생각한다.

     

    많이 사용하는 메서드, 애노테이션일 수록 그 의미와 기능을 잘 숙지하고 사용하는 것이 중요하다는 것을 알게 되었다.

Designed by Tistory.