こんにちは、エキサイトのしばたにえんです。
知っている人なら当たり前のことかもしれませんが、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
でバリデートされています。