본문 바로가기
스터디/Spring

[Spring] @ResponseBody와 @ModelAttribute 차이점

by zoodi 2021. 8. 17.
728x90

@RequestBody

@RequestBody는 클라이언트가 전송하는 Json(application/json)이나 xml 형태의 HTTP Body내용을 Java Object로 변환시켜준다 (POST / PUT). 따라서 Body가 존재하지 않는 GetMapping에 RequestBody를 사용하면 에러가 발생한다. Spring에서 관리하는 MessageConverter를 활용하여 Java 객체로 변환된다.

 

@ModelAttribute

@ModelAttribute는 클라이언트가 전송하는 multipart/form-data 형태의 요청 데이터(GET) 내용과 HTTP 쿼리 파라미터들을 Setter 메서드를 통해 1:1로 객체에 바인딩한다. 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는지를 포함한 다양한 검증(Validation) 작업이 추가로 진행된다. 만약 검증에 실패하게 된다면 BindException이 발생하게 된다.

즉, 1:1로 객체에 바인딩하므로 바인딩하려는 DTO 클래스에 Setter 메서드가 존재해야한다.

 

[요약]

@RequestBody :

- MessageConverter를 통해서 json 형태의 요청 http body data를 자바 오브젝트로 변환

- 바인딩이 아닌 변환을 하므로 setter 메서드가 없어도 정상적으로 변수들이 저장됨.

 

@ModelAttribute :

- multipart/form-data gudxodml http body내용과 http 파라미터들을 Setter 메서드를 통해 요청 파라미터를 1:1로 객체에 바인딩

- 변환이 아닌 바인딩을 하므로 setter 메서드 필요

 


참고 : https://mangkyu.tistory.com/72

 

[Spring] @RequestBody, @ModelAttribute, @RequestParam의 차이

이번에는 Spring에서 Client로 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들에 대해서 알아보도록 하겠습니다. 1. RequestBody, ModelAttribute, RequestParam이란? [ @RequestParam ] @RequestParam은..

mangkyu.tistory.com

 

728x90

댓글