@
目錄
1.常見表單驗證注解
限制 | 說明 |
---|---|
@Null | 限制只能為null |
@NotNull | 限制必須不為null |
@AssertTrue | 限制必須為true |
@DecimalMax(value) | 限制必須為一個不大於指定值的數字 |
@DecimalMin(value) | 限制必須為一個不小於指定值的數字 |
@Digits(integer,fraction) | 限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction |
@Future | 限制必須是一個將來的日期 |
@Max(value) | 限制必須為一個不大於指定值的數字 |
@Min(value) | 限制必須為一個不小於指定值的數字 |
@Past | 限制必須是一個過去的日期 |
@Pattern(value) | 限制必須符合指定的正則表達式 |
@Size(max,min) | 限制字符長度必須在min到max之間 |
@NotEmpty | 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) |
@NotBlank | 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同於@NotEmpty,@NotBlank 只應用於字符串且在比較時會去除字符串的空格 |
驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式 |
2.代碼實現
新建model其中兩個字段增加注解
@NotBlank(message = "用戶名稱不能為空")
@ApiModelProperty(value = "用戶名稱")
private String userName;
@Email(message = "請填寫正確的郵箱")
@ApiModelProperty(value = "郵箱")
private String email;
Controller
在需要校驗的model前增加@Valid 注解
@RequestMapping(method = RequestMethod.POST)
public String test(@Valid @RequestBody TestEntity model) {
try {
testEntityService.insert(model);
return "";
}catch (Exception e){
return "";
}
}
統一異常處理
通過ControllerAdvice和@ExceptionHandler注解,在Controller中發生的異常錯誤就到指定異常處理方法進行處理。
@ControllerAdvice
public class DoControllerAdvice {
private static final Logger logger = LoggerFactory.getLogger(DoControllerAdvice.class);
/**
* @param e
* @return d1.framework.webapi.http.Result
* @Description 必填校驗異常處理
* @Date 2019-07-30
*/
@ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result errorHandler(MethodArgumentNotValidException e) {
String errorMsg = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
logger.error("未處理異常", errorMsg);
return ResultUtil.fail(errorMsg);
}
}
看一下MethodArgumentNotValidException這個類的源碼 ,它繼承了Exception,包含參數和錯誤。BindError參數實現了error。 統一異常處理類實現完成。