@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' 카테고리의 다른 글
[Spring] 스프링 캐시 알아보기 (@Cacheable, @CachePut, @CacheEvict) (0) | 2023.03.12 |
---|---|
[Spring] Filter와 Interceptor 의미와 차이 (0) | 2022.10.06 |
[Spring] @NotNull @NotEmpty @NotBlank 차이점 (0) | 2021.08.17 |
[Spring] 싱글톤 패턴 (Singleton pattern) (0) | 2021.08.17 |
[Spring] Spring Container, BeanFactory 그리고 ApplicationContext (0) | 2021.08.17 |
댓글