1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バリデーションチェック時のnullと空文字との違い

Posted at

Spring Bootを使用して以下のようなバリデーションを想定します。
nullと空文字それぞれで挙動を確認します。

public class SampleRequest {
    @NotBlank(message = "空白です")
    @Size(max = 10, min = 10, message = "10桁で入力してください")
    @Positive(message = "正の数を入力してください")
    private String number;
}
@RestController
@RequestMapping("/api/v1")
public class SampleController {
    @PostMapping(value = "/hello")
    public String post(@RequestBody @Validated SampleRequest request) {
        return "hello";
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<List> handleError(MethodArgumentNotValidException exception) {
        List<String> messages = exception.getBindingResult().getFieldErrors().stream().map(FieldError::getDefaultMessage).toList();
        return ResponseEntity.badRequest().body(messages);
    }
}

nullの場合

nullをPOSTした場合は以下のレスポンスが返ってきます。

response
["空白です"]

これにより以下のことがわかります。

  • nullの場合は@NotBlankにひっかかります。
  • nullの場合は対象が存在しないため、@Size@Positiveで検証されません。

空文字の場合

空文字をPOSTした場合は以下のレスポンスが返ってきます。

response
["空白です","10桁で入力してください","正の数を入力してください"]

これにより以下のことがわかります。

  • 空文字の場合は@NotBlankにひっかかります。
  • 空文字の場合はサイズ0の文字列として扱われるため、@Size@Positiveでもひっかかります。

バリデーション時にnullと空文字それぞれで挙動は異なることがわかりました。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?