Spring框架的@Valid注解

Posted 阿丙的博客园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架的@Valid注解相关的知识,希望对你有一定的参考价值。

  上一篇文章介绍了springmvc的get请求参数可以是一个自定的对象。那么如何限制这个对象里的参数是否必传呢?

  方法一:在代码逻辑里取出对象里的这个值,手动进行判断
  方法二:使用@Valid注解,在接口请求的时候让Spring自己进行判断

 

比较

  如果用上面两个方法进行非空判断,当参数传的是空的时候,

  方法一的返回结果的状态是 200,方法二的返回结果状态是 400;
  方法一需要自定义返回结果并且可以直接在页面中进行展示,方法二的返回结果需要从Response Body中获取。
  方法一复杂,方法二简单。

  所以这两种方法的适用场景是不同的,如果要在页面输出,应该使用方法一,如果只是接口之间调用,那么使用方法二就可以了

 

如何使用@Valid注解

比如请求:
  public String login(@Valid User user) {...}

User.java 如下:

 1 import org.hibernate.validator.constraints.Length;
 2 import javax.validation.constraints.NotBlank;
 3 
 4 /**
 5  * @author jiashubing
 6  * @since 2019/1/9
 7  */
 8 public class User {
 9     @NotBlank(
10             message = "姓名不能为空"
11     )
12     @Length(
13             message = "姓名最长为20个字符"
14             , min = 1
15             , max = 20
16     )
17     private String name;
18 
19     @NotBlank(
20             message = "密码不能为空"
21     )
22     @Length(
23             message = "密码最少为8个字符,最长为30个字符"
24             , min = 8
25             , max = 30
26     )
27     private String password;
28 
29     public String getName() {
30         return name;
31     }
32 
33     public void setName(String name) {
34         this.name = name;
35     }
36 
37     public String getPassword() {
38         return password;
39     }
40 
41     public void setPassword(String password) {
42         this.password = password;
43     }
44 
45 }

 

 以下转自:http://blog.51cto.com/825272560/2121519

  @Valid注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则,而在API接收数据时添加@valid关键字,这时你的实体将会开启一个校验的功能。

@Valid 注解类型

@Null
限制只能为null

@NotNull
限制必须不为null

@AssertFalse
限制必须为false

@AssertTrue
限制必须为true

@DecimalMax(value)
限制必须为一个不大于指定值的数字

@DecimalMin(value)
限制必须为一个不小于指定值的数字

@Digits(integer,fraction)
限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

@Future
限制必须是一个将来的日期

@Max(value)
限制必须为一个不大于指定值的数字

@Min(value)
限制必须为一个不小于指定值的数字

@Past
限制必须是一个过去的日期

@Pattern(value)
限制必须符合指定的正则表达式

@Size(max,min)
限制字符长度必须在min到max之间

@Past
验证注解的元素值(日期类型)比当前时间早

@NotEmpty
验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

@NotBlank
验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

@Email
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

注意,不要错用了异常类型,比如在int上不可用@size

 

原创文章,欢迎转载,转载请注明出处!

以上是关于Spring框架的@Valid注解的主要内容,如果未能解决你的问题,请参考以下文章

Spring 使用Validation 验证框架的问题详解

springMVC @valid 注解没有效果是怎么回事?

Spring MVC 注解@Valid 啥意思

控制器层如何@Valid启用验证?

Spring中通过java的@Valid注解和@ControllerAdvice实现全局异常处理。

参数校验Spring的@Valid注解用法详解