@ModelAttribute와 @RequestBody의 차이점

겨리·2021년 6월 13일
0

spring

목록 보기
1/1
post-thumbnail

개발하는데 @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를 통해 변환
profile
개발하는 겨리

0개의 댓글