這里針對springboot項目結構
maven添加:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
controller(@Validated、@Valid)
@PostMapping("/test.do")
public JSONMessageResponse test(@Validated @RequestBody TestVO testVO) {
}
TestVO
public class TestVO {
@NotEmpty(message = "名稱不能為空")
String name; // 名稱
@ListNotEmptyNull(message = "不能為空的數組") // 自定義
@ListSize(min = 1, max = 5, message = "錯誤的數組大小")
@Valid
List<UserVO> list;
}
public class UserVO {
@NotEmpty(message = "名稱不能為空")
String name; // 名稱
}
錯誤攔截
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
BindingResult bindingResult = ex.getBindingResult();
String errorMessage = "參數校驗失敗";
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorMessage += ", " + fieldError.getDefaultMessage();
}
JSONMessageResponse error = SystemResultUtil.error(5006, errorMessage);
return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
}
}
查看返回(返回結構可自定義,這里不詳細指出)
{
"code": 5006,
"message": "參數校驗失敗,名稱不能為空",
"status": 1
}

對於列表的操作,可以自定義:例如下面的指定list的大小(當然,自帶的@Size可以實現)
/**
* 指定列表的大小
*
* @author sky.javaweb@qq.com
* @version 1.0
* @date 2019-01-07
*/
@Target({ANNOTATION_TYPE, METHOD, FIELD})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ListSizeValidationImpl.class)////此處指定了注解的實現類為ListSizeValidationImpl
public @interface ListSize {
int min() default 0;
int max() default Integer.MAX_VALUE;
String message() default "List集合大小錯誤";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* 定義List,為了讓Bean的一個屬性上可以添加多套規則
*/
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@interface List {
ListSize[] value();
}
}
/**
* @author sky.javaweb@qq.com
* @version 1.0
* @date 2019-01-07
*/
@Service
public class ListSizeValidationImpl implements ConstraintValidator<ListSize, List> {
private int min;
private int max;
@Override
public void initialize(ListSize constraintAnnotation) {
this.min = constraintAnnotation.min();
this.max = constraintAnnotation.max();
}
@Override
public boolean isValid(List list, ConstraintValidatorContext context) {
if (list != null) {
if (list.size() < min || list.size() > max) {
return false;
}
}
return true;
}
}
使用如下:
@ListSize(min = 2, max = 5, message = "無效的案例圖片")
List<String> imageList; // 圖片
{
"code": 5006,
"message": "參數校驗失敗, 無效的案例圖片",
"status": 1
}
