一、實體類添加注解
例如:@NotBlank(message = "手機號不能為空")
注解功能說明如下:
限制 | 說明 |
---|---|
@Null | 限制只能為null |
@NotNull | 限制必須不為null |
@AssertFalse | 限制必須為false |
@AssertTrue | 限制必須為true |
@DecimalMax(value) | 限制必須為一個不大於指定值的數字 |
@DecimalMin(value) | 限制必須為一個不小於指定值的數字 |
@Digits(integer,fraction) | 限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction |
@Future | 限制必須是一個將來的日期 |
@Max(value) | 限制必須為一個不大於指定值的數字 |
@Min(value) | 限制必須為一個不小於指定值的數字 |
@Past | 限制必須是一個過去的日期 |
@Pattern(value) | 限制必須符合指定的正則表達式 |
@Size(max,min) | 限制字符長度必須在min到max之間 |
@Past | 驗證注解的元素值(日期類型)比當前時間早 |
@NotEmpty | 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) |
@NotBlank | 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同於@NotEmpty,@NotBlank只應用於字符串且在比較時會去除字符串的空格 |
驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式 |
二、controller添加注解
在需要校驗的實體對象添加@Validated注解
三、添加RestController統一異常處理handler
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageConversionException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
/**
* 校驗統一處理異常
* 如果校驗不通過,就在異常中處理,統一輸出格式
* created by chl on 2020/6/11
**/
@Slf4j
@RestControllerAdvice
public class RequestValidateExceptionHandle {
/**
* 校驗錯誤攔截處理
*
* @param exception 錯誤信息集合
* @return 錯誤信息
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public Message validationBodyException(MethodArgumentNotValidException exception) {
BindingResult result = exception.getBindingResult();
String message = "";
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
if (errors != null) {
errors.forEach(p -> {
FieldError fieldError = (FieldError) p;
log.error("Data check failure : object{" + fieldError.getObjectName() + "},field{" + fieldError.getField() +
"},errorMessage{" + fieldError.getDefaultMessage() + "}");
});
if (errors.size() > 0) {
FieldError fieldError = (FieldError) errors.get(0);
message = fieldError.getDefaultMessage();
}
}
}
return Message.fail("".equals(message) ? "請填寫正確信息" : message);
}
/**
* 參數類型轉換錯誤
*
* @param exception 錯誤
* @return 錯誤信息
*/
@ExceptionHandler(HttpMessageConversionException.class)
public Message parameterTypeException(HttpMessageConversionException exception) {
log.error(exception.getCause().getLocalizedMessage());
return Message.fail("類型轉換錯誤");
}
}