본문 바로가기
성동스터디 (2021.09.09 ~ ing)/Spring

[Spring] @RequestBody, @ModelAttribute, BindingResult

by juniKang 2021. 12. 28.

@RequestBody 는 요청 본문에 있는 JSON 등의 객체를 자바 객체로 HttpMessageConverter에 등록된 구현체를 통해 변환해서 맵핑하는 기능을 합니다.

{
  "username" : "juni",
  "password" : "1234",
}

 

@ModelAttribute는 요청 파라미터에 있는 String정보를 자바 객체의 필드 값으로 변환해서 받는 기능을 합니다.

요청 파라미터 예시

1. http://localhost:8080/mypage?username=juni

2. 

<form action="user/new" method="post">
  아이디 : <input type="text" name="username"/>
  비밀번호 : <input type="password" name="password"/>
</form>

 

BindingResult는 바인딩의 결과를 담는 아규먼트 타입입니다. @ModelAttribute 에서의 바인딩은 HttpMessageConverter 구현체중 jackson converter가 담당해서 하는데, 이 jackson converter가 변환하는 과정에서 에러가 발생하면 바로 에러 응답을 보냅니다. 그리고 일단 jackson이 자바 객체로 변환한 후에 @Validation 체크를 할 수 있는데, 이 때 발생한 에러는 bindingResult로 담을 수 있습니다.

 

@ModelAttributed의 경우, binding을 하는 주체가 스프링이기 때문에, string대신 int를 받으면 에러를 bindingResult에 던져줄 수 있지만, @RequestBody의 경우, binding을 하는 주체가 외부 라이브러리여서 그 외부 라이브러리는 바인딩에 실패하면 단순히 400에러만 을 던져줍니다. 대신, 바인딩 처리가 끝나고 @Validation 체크는 스프링에서 처리하고 bindingResult에 담아줄 수 있습니다.

 

https://www.inflearn.com/questions/375360

 

 

 

댓글