这里针对springboot项目结构
maven添加:
javax.validation validation-api
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 Listlist;}
public class UserVO { @NotEmpty(message = "名称不能为空") String name; // 名称}
错误拦截
@ControllerAdvicepublic class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @Override protected ResponseEntity
查看返回(返回结构可自定义,这里不详细指出)
{ "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)此处指定了注解的实现类为ListSizeValidationImplpublic @interface ListSize { int min() default 0; int max() default Integer.MAX_VALUE; String message() default "List集合大小错误"; Class [] groups() default {}; Class [] 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 */@Servicepublic class ListSizeValidationImpl implements ConstraintValidator{ 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 = "无效的案例图片") ListimageList; // 图片
{ "code": 5006, "message": "参数校验失败, 无效的案例图片", "status": 1}