Spring - Bean Validation - Http 메시지 컨버터

현시기얌·2021년 7월 21일
0

Bean Validation

목록 보기
5/5

1. Bean Validation - Http Message Converter

@Valid @Validated는 @RequestBody에도 적용할 수 있다.

즉 API JSON 요청을 다룰때에도 사용 가능 하다.

API의 경우 고려해야할 3가지

성공 요청 : 성공
실패 요청 : JSON을 객체로 생성하는 것 자체가 실패 (Binding 실패)
검증 오류 요청 : JSON을 객체로 생성하는 것은 성공했고 검증에서 실패

검증 실패 시 BindingResult.getAllErrors()에 담긴 값들 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 VS @RequestBody

@ModelAttribute는 각각의 필드 단위로 적용되기 때문에 특정 필드에 타입이 맞지 않는 오류가 발생해도 나머지 필드는 정상적으로 처리한다.
때문에 특정 필드가 바인딩 되지 않더라도 Validator를 사용한 검증을 할 수 있다.

@RequestBody는 전체 객체 단위로 적용되기 때문에 특정 필드에 타입이 맞지 않는 오류가 발생하면 예외가 발생한다.
때문에 특정 필드가 바인딩 되지 않으면 Validator를 사용한 검증을 할 수 없다.


참고 : 스프링 MVC 2편 : 백엔드 웹 활용 기술

profile
현시깁니다

0개의 댓글

관련 채용 정보