最近在做的公司項目是一個表單系統,剛好要用到@Validated注解來對表單字段進行驗證。第一次使用遇到了一些坑,問了同事之后,總算是掌握了。
首先,在dto實體你想要做驗證的屬性前,加上@NotBlank/NotNull/NotEmpty注解:
他們的區別如下:
@NotBlank:只用在String上,表示傳進來的值不能為null,而且調用trim()后,長度必須大於0
@NotNull:不能為null,但可以為empty(分配了內存空間,但值為空)
@NotEmpty:不能為null,而且長度必須大於0
然后在service層接口前添加注解@Validated
然后運行,給屬性傳遞空值,發現沒有任何反應;是因為沒在接口方法的參數前加上@Valid注解,如下所示:
加上后再運行,傳遞空值,成功報錯。
(同時,以上總結可以加在controller層進行驗證,@valid同樣加在方法參數前經典電影,@validated加在controller類名前圖
同樣能起效果)
做到后面發現傳遞的對象里面還有一個對象,要對里面的對象進行驗證,這時候是驗證不到的
需要在里面對象前也加上總結@valid,這樣,無論嵌套多少,都可以驗證
(對於對象泛型,也能驗證成功)