업무하는데 @ModelAttribute를 사용했더니 null 값이 들어가고 @RequestBody를 사용했더니 데이터가 넘어가길래 궁금해서 알아봤다!🤨
@ModelAttribute
클라이언트가 전송하는 multipart/form-data 형태의 HTTP Body 내용과 HTTP 파라미터들을 Setter를 통해 일대일로 객체에 바인딩하기 위해 사용됨
@ModelAttribute에는 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는 지를 포함한 다양한 검증 작업이 추가적으로 진행됨 e.g. 게시물의 번호를 저장하는 int 타입의 index 변수에 "1번" 이라는 String 타입의 value를 넣으면 BindException이 발생!
변환이 아닌 바인딩을 시키기때문에 변수들의 Setter 함수가 없으면 저장 ❌
@RequestBody
클라이언트가 전송하는 Json(Application/json) 형태의 HTTP Body 내용을 Java Object로 변환시켜주는 역할을 함 ➡ Body가 존재하지 않는 Get 메서드에 @RequestBody를 활용하려고 하면 에러 발생!
@RequestBody로 받는 데이터는 Spring에서 관리하는 MessageConverter들 중 하나인 MappingJackson2HttpMessageConverter를 통해 Java 객체로 변환됨
바인딩이 아닌 변환을 시키므로 변수들의 Setter 함수가 없어도 정상적으로 저장 ⭕
@ModelAttribute와 @RequestBody의 차이점
@ModelAttribute : multipart/form-data 형태의 HTTP Body와 HTTP 파라미터들을 매핑
@RequestBody : Json이나 XML과 같은 형태의 데이터를 MessageConverter를 통해 변환
댓글 영역