RequestBody는 클라이언트가 전송하는 Json 형태의 HTTP request Body를 HttpMessageConverter를 이용하여 Java 객체의 형태로 Convert 해주는 어노테이션이다. 선택적으로 Valid 어노테이션을 추가하여 자동 유효성 검사를 적용할 수도 있다.
회원 정보 수정 API
@PatchMapping("/api/v2/members/{id}")
public UpdateMemberResponse updateMemberV2(@PathVariable("id") Long id,
@RequestBody @Valid UpdateMemberRequest request)
RequestParam은 Servlet request 파라미터에 접근하기 위해 사용한다. multipart file 과 같은 것들도 동일하게 잘 작동한다. 1개의 HTTP 요청 파라미터를 받기 위해서 사용하며, 파라미터 여부가 default로 true이기 때문에 파라미터가 반드시 전송되어야 한다. → 전송되지 않는 경우 클라이언트 오류인 400에러가 발생한다. ( required 옵션을 false 로 변경하면 괜찮아진다. )
RequestParam은 단순 파라미터 값에 효과적인 어노테이션이다.
RequestPart는 HTTP request body에 multipart/form-data 가 포함되어 있는 경우에 사용하는 어노테이션이다. ( 스프링에서 제공하는 어노테이션이다. ) MultipartFile이 포함되어 있는 경우에는 MultipartResolver가 동작하여 역직렬화를 하게 된다. ( Byte로 되어있는 데이터를 객체 형태로 변환한다. ) 만약 MultipartFile이 포함되어있지 않다면, RequestBody와 마찬가지로 동작하게 된다.
ModelAttribute는 Spring Controller에서 값을 받을 때, default의 설정이다. Http body로 오거나, 파라미터로 오는 경우에도 받을 수 있고, 이를 binding을 통해 처리한다. 내부적으로는 어노테이션의 내부 필드와 생성자 혹은 Setter를 통해 값이 매핑된다. RequsetPart와 다른 점은 HttpMessageConverter를 통해 값이 Binding되지 않고 생성자 혹은 Setter를 통해 값이 주입된다.
레퍼런스