通过之前的一些文章
之前的校验基本都是基于对象参数或者@RequestBody 请求体参数。对于下面这种多参数直接校验的暂时还没介绍到
@RestController
public class TestController{
@Getmapping("/test")
public Object test(String name,Integer age,String address){
return name;
}
}
对于上面的test方法参数校验,无论将@Valid或者@Validated加到方法或者参数上都是无法校验的
例如下面的错误示范:
@RestController
public class TestController{
@Getmapping("/test")
@Validated
public Object test(@NotEmpty(message="名称为空")String name,Integer age,String address){
return name;
}
}
@RestController
public class TestController{
@Getmapping("/test")
public Object test(@Validated @NotEmpty(message="名称为空") String name,Integer age,String address){
return name;
}
}
注意:以上校验都是无法生效的
正确示例:
@RestController
@Validated
public class TestController{
@Getmapping("/test")
public Object test(@NotEmpty(message="名称为空") String name,@Min(value=1,message="年龄最小为1") @Max(value=150,message="年龄最大为150")Integer age,@NotEmpty(message="地址为空")String address){
return name;
}
}
@Validated 注解一定是加在类上面哟
以上校验,访问/test的时候会抛出异常ConstraintViolationException
通过全局拦截处理参考
@ExceptionHandler(ConstraintViolationException.class)
public Object constraintViolationException(ConstraintViolationException cve){
logger.error(cve.getMessage(),cve);
Set<ConstraintViolation<?>> constraintViolations = cve.getConstraintViolations();
List<String> messageList=new ArrayList<>();
for (ConstraintViolation<?> next : constraintViolations) {
messageList.add(next.getMessage());
}
return Result.fail(Constants.ApiCode.paramsError,"参数缺失-"+ String.join(",",messageList));
}
以上就能完美的处理spring boot form-data简单的多个参数校验
http://blog.xqlee.com/article/1097.html