@Valid @Validated는 @RequestBody에도 적용할 수 있다.
즉 API JSON 요청을 다룰때에도 사용 가능 하다.
성공 요청 : 성공
실패 요청 : JSON을 객체로 생성하는 것 자체가 실패 (Binding 실패)
검증 오류 요청 : JSON을 객체로 생성하는 것은 성공했고 검증에서 실패
[
{
"codes": [
"NotBlank.itemSaveForm.itemName",
"NotBlank.itemName",
"NotBlank.java.lang.String",
"NotBlank"
],
"arguments": [
{
"codes": [
"itemSaveForm.itemName",
"itemName"
],
"arguments": null,
"defaultMessage": "itemName",
"code": "itemName"
}
],
"defaultMessage": "공백일 수 없습니다",
"objectName": "itemSaveForm",
"field": "itemName",
"rejectedValue": "",
"bindingFailure": false,
"code": "NotBlank"
},
{
"codes": [
"Range.itemSaveForm.price",
"Range.price",
"Range.java.lang.Integer",
"Range"
],
"arguments": [
{
"codes": [
"itemSaveForm.price",
"price"
],
"arguments": null,
"defaultMessage": "price",
"code": "price"
},
1000000,
1000
],
"defaultMessage": "1000에서 1000000 사이여야 합니다",
"objectName": "itemSaveForm",
"field": "price",
"rejectedValue": 1,
"bindingFailure": false,
"code": "Range"
}
]
BindingResult.getAllErrors()는 ObjectError와 FieldError 모두 반환한다.
@ModelAttribute는 각각의 필드 단위로 적용되기 때문에 특정 필드에 타입이 맞지 않는 오류가 발생해도 나머지 필드는 정상적으로 처리한다.
때문에 특정 필드가 바인딩 되지 않더라도 Validator를 사용한 검증을 할 수 있다.
@RequestBody는 전체 객체 단위로 적용되기 때문에 특정 필드에 타입이 맞지 않는 오류가 발생하면 예외가 발생한다.
때문에 특정 필드가 바인딩 되지 않으면 Validator를 사용한 검증을 할 수 없다.
참고 : 스프링 MVC 2편 : 백엔드 웹 활용 기술