Formでint型の変数には@NotNullは使えない

こんにちは、エキサイトのしばたにえんです。

知っている人なら当たり前のことかもしれませんが、Formでint型の変数には@NotNullは使えません

早速ですが以下をご覧ください

SampleController.java
@RestController
public class SampleController {
    @GetMapping("sample")
    void get(@ModelAttribute @Valid SampleRequest sampleRequest, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            throw new BadRequestException(
                    bindingResult
                            .getFieldError("num")
                            .getDefaultMessage()
            );
        }
    }
}
SampleRequest.java
@Data
public class SampleRequest {

    @NotNull
    private int num;
}

http://localhost:8080/sampleにアクセス

<Response body is empty>

numがない状態でのアクセスなので@NotNullに引っかかってエラーになると思いますが エラーは表示されません。 クエリパラメーターで値が入っていない場合 numにはint型のデフォルト値が入りnum = 0となるため @NotNullには引っかからないのです。

対処法
@Data
public class SampleRequest {

    @NotNull
    private Integer num;
}

http://localhost:8080/sampleにアクセス

{
  "error": {
    "message": "null は許可されていません"
  }
}

numにはInteger型のデフォルト値が入りnum = nullとなるため @NotNullでバリデートされています。