@ModelAttribute, @RequestBody
@Valid, @Validated는 @ModelAttribute뿐만 아니라 @RequestBody에도 적용할 수 있다. @ModelAttribute는 요청 파라미터 혹은 Form Data(x-www-urlencoded)를 다룰 때 사용하고 @RequestBody 는 HTTP Body Data를 Object로 변환할 때 사용한다.
@Data
public class ExampleRequestDto {
@NotBlank
private String field1;
@NotNull
@Range(min = 1, max = 150)
private Integer field2;
}
@Slf4j
@RestController
public class RequestBodyController {
@PostMapping("/example")
public Object save(
@Validated @RequestBody ExampleRequestDto dto,
BindingResult bindingResult
) {
log.info("RequestBody Controller 호출");
if(bindingResult.hasErrors()) {
log.info("validation errors={}", bindingResult);
// Field, Object Error 모두 JSON으로 반환
return bindingResult.getAllErrors();
}
// 성공 시 RequestDto 반환(의미 없음)
return dto;
}
}
Rest API 요청의 세가지 경우의 수
1. 성공 요청: 성공


Controller 정상 호출
응답 반환

field2에 String 입력
@Range(max = 150)bindingResult.getAllErrors() 가 MessageConverter에 의해 JSON으로 변환되어 반환된다.정리
@ModelAttribute와 @RequestBody 차이점
추가내용
bindingResult.getAllErrors()는 FieldError와 ObjectError 모두 반환한다.@ControllerAdvice