BindingResult用在實體類校驗信息返回結果綁定。
實體類常用的校驗注解有:
@Null 被注釋的元素必須為null
@NotNull 被注釋的元素不能為null
@AssertTrue 該字段只能為true
@AssertFalse 該字段的值只能為false
@Min(value) 被注釋的元素必須是一個數字,其值必須大於等於指定的最小值
@Max(value) 被注釋的元素必須是一個數字,其值必須小於等於指定的最大值
@DecimalMin("value") 被注釋的元素必須是一個數字,驗證小數的最小值
@DecimalMax("value") 被注釋的元素必須是一個數字,驗證小數的最大值
@Size(max,min) 查該字段的size是否在min和max之間,可以是字符串、數組、集合、Map等
@Digits(integer,fraction) 檢查是否是一種數字的整數、分數,小數位數的數字
@Past 被注釋的元素必須是一個過去的日期
@Future 被注釋的元素必須是一個將來的日期
@Pattern(regexp = "[abc]") 被注釋的元素必須符合指定的正則表達式。
@Email 被注釋的元素必須是電子郵件地址
@Length(max=5,min=1,message="長度在1~5") 檢查所屬的字段的長度是否在min和max之間,只能用於字符串
@NotEmpty 被注釋的字符串必須非空
@Range 被注釋的元素必須在合適的范圍內
@CreditCardNumber 對信用卡號進行一個大致的驗證
@NotBlank 不能為空,檢查時會將空格忽略
@NotEmpty 不能為空,這里的空是指空字符串
以上注解在使用時,都可以設置自定義message提示信息。
@ApiModel(value ="TestEntity") public class TestEntity implements Serializable{ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "唯一id") private Long id; @Size(max=10,message="最大長度為10") @ApiModelProperty(value = "名稱") private String name; @NotNull(message="參數不能為空") @ApiModelProperty(value = "年齡") private Integer age; //getter setter... }
public class TestController { @PostMapping("/a") @ApiOperation(value = "測試", notes = "") public void test(@RequestBody @Valid TestEntity test,BindingResult bindingResult) { System.out.println(test.toString()); if (bindingResult.hasErrors()) { throw new 自定義Exception("錯誤提示碼",bindingResult.getFieldError().getDefaultMessage()); } } }
@Valid和BindingResult配套使用,@Valid用在參數前,BindingResult作為校驗結果綁定返回。
bindingResult.hasErrors()判斷是否校驗通過,校驗未通過,bindingResult.getFieldError().getDefaultMessage()獲取在TestEntity的屬性設置的自定義message,如果沒有設置,則返回默認值"javax.validation.constraints.XXX.message"。
注意:在實體類使用校驗注解時,controller一定要使用bindingResult處理校驗結果,且實體類作為查詢參數時,避免被其他方法使用,不然的地方需要限制,有的沒有,不需要限制的方法會報錯。