Spring-Bean Validation-httpメッセージ変換器

2560 ワード

1. Bean Validation - Http Message Converter


@Valid@Validatedは@RequestBodyにも適用できます.
すなわち、API JSONリクエストの処理においても利用可能である.

APIは3つの側面を考慮する必要がある


要求成功:成功
失敗リクエスト:JSONをオブジェクトとして作成すること自体が失敗(Binding失敗)
検証エラー要求:JSONのオブジェクト作成に成功しました.検証に失敗しました

検証に失敗した場合BindingResult。JSONでgetAllErrors()の値を表示する

[
    {
        "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を使用して検証できません.
注:第2編Spring MVC:バックエンドWeb使用技術