前段验证的时候参数判断比较麻烦,spring 提供了对参数的验证框架 javax.validation 使用起来参数验证会方便很多,java是核心包,javax的x是extension,也就是扩展包javax类库则是在上面增加的一层东西,就是为了保持版本兼容要保存原来的,但有些东西有了更好的解决方案,所以,就加上些,典型的就是awt(Abstract Windowing ToolKit) 和swing。
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这个web依赖包含和验证依赖中可以看到包含了
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
注解:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
使用:可以用于 对象 和 单个参数的验证 下面来测试下
单个参数使用:
控制器添加 @Validated 注解 方法@NotEmpty
@GetMapping("name")
public String validate(@NotEmpty String name){
return "张三";
}
{
"msg": "运行时异常:validate.name: 不能为空",
"code": 500
}
postMan 测试返回
实体类验证:
也可以自己定义错误信息
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
/**
* @Author chenkang
* @Date 2020/1/20
*/
@Data
public class ValidUser {
@NotEmpty(message = "用户名不能为空")
private String userName;
@Max(value = 30,message = "年龄太大了")
private Integer age;
}
@ResponseBody
@GetMapping("validateObj")
public String validateObj(@Valid ValidUser user){
return "张三";
}
接口请求返回
{
"msg": "年龄太大了",
"code": 500
}
验证成功方法不再执行
验证不通过会直接抛异常只要在全局异常的地方统一处理下给出响应的提示就可以了可以自己去定义
其他的还可以分组验证 和 方法获取验证结果