這裏針對springboot項目結構java
maven添加: web
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
controller(@Validated、@Valid)spring
@PostMapping("/test.do") public JSONMessageResponse test(@Validated @RequestBody TestVO testVO) { }
TestVO api
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); } }
查看返回(返回結構可自定義,這裏不詳細指出)springboot
{ "code": 5006, "message": "參數校驗失敗,名稱不能爲空",
"status": 1
}
對於列表的操做,能夠自定義:例以下面的指定list的大小(固然,自帶的@Size能夠實現)app
/** * 指定列表的大小 * * @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; } }
使用以下:maven
@ListSize(min = 2, max = 5, message = "無效的案例圖片") List<String> imageList; // 圖片
{ "code": 5006, "message": "參數校驗失敗, 無效的案例圖片", "status": 1 }