我们在写http接口常常要对传递参数进行校验
1.PathVariable校验
@GetMapping("/path/{group:[a-zA-Z0-9_]+}/{userid}")
@ResponseBody
public String path(@PathVariable("group") String group, @PathVariable("userid") Integer userid) {
return group + ":" + userid;
}
用法是:路径变量:正则表达式。当请求URI不满足正则表达式时,客户端将收到404错误码
。不方便的地方是,不能通过捕获异常的方式,向前端返回统一的、自定义格式的响应参数。
2.Get路径参数校验
注意:要在类上打一个@Validated
标签才能生效
@GetMapping("/validate1")
@ResponseBody
public String validate2(
@Size(min = 1,max = 10,message = "姓名长度必须为1到10")@RequestParam("name") String name,
@Min(value = 10,message = "年龄最小为10")@Max(value = 100,message = "年龄最大为100") @RequestParam("age") Integer age) {
return "validate1";
}
postman校验结果:
这里的validate2.name是方法的名字.属性
3.JavaBean接收
public class User {
@Size(min = 1,max = 10,message = "姓名长度必须为1到10")
private String name;
@NotEmpty
private String firstName;
@Min(value = 10,message = "年龄最小为10")@Max(value = 100,message = "年龄最大为100")
private Integer age;
@Future
//@Future表示未来的某一时间
@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date birth;
。。。
}
Controller:
@PostMapping("/validate2")
@ResponseBody
public User validate2(@Validated @RequestBody User user){
return user;
}
4.@validated注解说明
空校验 | 针对类型 | 说明 |
---|---|---|
@Nullr | 任何类型 | 校验对象必须为空 |
@NotNull | 校验对象不为空 | 校验对象不为空,不能校验字符串长度为0的对象 |
@NotBlank | 字符串 | 只对字符串有效,校验字符串去掉前后空格后长度不为0 |
@NotEmpty | 字符串、集合、数组 | 校验对象不能为空 (字符串长度不为0、集合大小不为0) |
Boolean类型校验 | 针对类型 | 说明 |
---|---|---|
@AssertTrue | 布尔 | 校验boolean类型必须为true |
@AssertFalse | 布尔 | 校验boolean类型必须为false |
日期校验 | 针对类型 | 说明 |
---|---|---|
@Past | 日期类型 | 校验必须是一个过去的日期 |
@Future | 日期类型 | 校验必须是一个将来的日期 |
数值校验 | 针对类型 | 说明 |
---|---|---|
@Min | 数字类型 | 校验必须是一个数字,其值必须大于或等于指定的最小值 |
@Max | 数字类型 | 校验必须是一个数字,其值必须小于或等于指定的最大值 |
@DecimalMax(value) | 数字类型 | 校验必须是一个数字,其值必须大于或等于指定的最小值 |
@DecimalMax(value) | 数字类型 | 校验必须是一个数字,其值必须小于或等于指定的最大值 |
@Digits(integer=,fraction=) | 数字类型 | 校验必须是一个数字,interger指定整数精度,fraction指定小数精度 |
@Range(min =,max = ) | 数字类型、字符串 | 校验对象的值在min和max区间内 |
@Length(min =,max = ) | 数字类型 | 校验对象的值的长度在min和max区间内 |
@Size(min =,max = ) | 数字类型 | 校验对象的值在min和max区间内,如字符长度、集合大小 |
其他校验 | 针对类型 | 说明 |
---|---|---|
字符串 | 校验对象的值必须是Email类型,也可以通过regexp和flag指定自定义的email格式 | |
@Pattern | 字符串 | 校验对象的值必须符合指定的正则表达式 |
@CreditCardNumber | 数字类型、字符串 | 校验对象的值必须是信用卡类型 |
@URL | 字符串 | 校验对象的值必须是URL地址 |