使用SpringMVC的@Validated注解验证

最近作为新手刚接触到SpringMVC的@Validated注解验证,为了能加深理解。在此记录下@Validated的使用,一下的步骤省略了配置文件与环境的搭建,直接从使用开始。

1、SpringMVC验证@Validated的使用

第一步:编写国际化消息资源文件

编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制

edit.username.null=用户名不能为空
edit.password.size=密码最少{min}位,最长{max}位
......
可以将edit.username.null与edit.password.size看为参数,在message中传递,具体请看第二步。

第二步:Bean实体类中加注解

首先介绍关于验证注解的类型种类

@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之间
@NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
使用 这些注解很简单,只需要在实体类中的变量属性前面加上该注解即可。

public class User {  
    private String id; 
    @NotEmpty(message = "{edit.username.null}")
    private String username;
    @Size(min=6 ,max= 20 ,message = "{edit.password.size}")
    private String password;
   ......
}

其中{}相当于占位符,将min、max参数传图,同时也将消息文件中定制的错误信息传入,当然也可以直接不使用国际化文件,但是推荐使用,方便统一与修改。

public class User {  
    private String id; 
    @NotEmpty(message = "用户名不能为空")
    private String username;
    @Size(min=6 ,max= 20 ,message = "密码最少6位,最高20位")
    private String password;
   ......
}

第三步:Controller层的编写


Controller层的使用,很简单。需要在相应的方法传入的Bean参数前面增加注解@Validated,还有增加BindingResult参数即可,具体请看代码示例:

@Controller  
public class UserController {  
  
    @RequestMapping("/save")  
    public String save(@Validated User user, BindingResult result) {  
        if(result.hasErrors()) {  
            return "error";  
        }  
        return "success";  
    }  
}

第四步:在View层显示错误信息


这里就不做介绍了,实际项目中会封装好相应的javcscript等方法,只需要调用就可以返回页面提示给用户错误信息。

2、@Validated的分组特性


先在记录之前,介绍一下这样的场景:在对用户的帐号密码进行编辑保存以及新增是两种不一样的情况。

编辑修改->保存:只需要验证username与password是否符合条件即可,不需要验证id(因为在数据库中id已经存在)。

新增->保存:新增需要验证username与password是否符合条件,还要验证id。

这时候就用到groups分组分情况对Bean属性变量进行验证,也可以满足多验证。具体的需要一下两个步骤

第一步:创建分组接口类


分组接口类只是普通的接口类并没有多大意义,只是用来标识这个属性哪种情况下被验证,这类似于java.io.Serializable  

public interface addUser{ 
} 
public interface editUser{
}

第二步:Controller方法参数中增加xxx.class接口


在对新增的用户进行ID验证,增加@Validated({addUser.class})接口类用来表示新增的User.getId()需要验证。

@Controller  
public class UserController {  
  
    @RequestMapping("/saveAdd")  
    public String saveAddUser(@Validated({addUser.class}) User user, BindingResult result) {  
        if(result.hasErrors()) {  
            return "error";  
        }  
        return "success";  
    }

第三步:Bean中添加groups分组


在User实体类中添加groups分组@NotEmpty(groups={addUser.class})与UserController中@Validated({addUser.class})对应,说明在执行saveAddUser新增用户的情况下,才对新增的用户id进行验证。

public class User {   
    //在分组addUser时,验证id不能为空,其他情况下不做验证
    @NotEmpty(groups={addUser.class})
    private String id;
    @NotEmpty(message = "用户名不能为空")
    private String username;
    @Size(min=6 ,max= 20 ,message = "密码最少6位,最高20位")
    private String password;
   ......
}
以上三步就可以简单地完成分组验证,但是对分组验证补充一下三点:

第一是:不分配groups分组时,默认每次都需要验证。

第二是:通过groups分组可以对同一个变量进行多个验证,如下代码
//对用户名进行两次不同情况的验证。
@NotEmpty(groups={First.class})
@Size(min=1,max=10,groups={Second.class})
public String username; 

第三是:默认的情况下,不同的分组约束验证是无序的,但是在有些情况下验证的相互约束很重要(比如前一个组验证失败,后面的将不再验证等情况),所以groups分组的验证也有前后验证顺序。使用@GroupSequence注解进行排序。
/*
 * 分组顺序接口类
 */
import javax.validation.GroupSequence;
//分组序列先Frist再Second
@GroupSequence({First.class,Second.class})
public interface Group{
}

@Controller  
public class UserController {  
  
    @RequestMapping("/saveAdd")  
    public String saveAddUser(@Validated({Group.class}) User user, BindingResult result) {  
        if(result.hasErrors()) {  
            return "error";  
        }  
        return "success";  
    }


  • 8
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: @GetMapping注解是Spring MVC的一个注解,用于将HTTP GET请求映射到指定的处理方法上。 使用@GetMapping注解可以非常方便地定义RESTful风格的API接口。当客户端发送GET请求时,Spring MVC框架会根据请求的URL路径和HTTP参数自动匹配到对应的处理方法,并将处理方法的返回值转换成HTTP响应返回给客户端。 例如,使用@GetMapping注解可以定义一个处理GET请求的方法如下: ``` @GetMapping("/users") public List<User> getUsers() { // 从数据库或其他数据源获取用户列表 List<User> userList = userService.getUserList(); return userList; } ``` 在上面的代码,@GetMapping注解标注的是处理GET请求的方法,它的路径为"/users",表示当客户端发送GET请求访问"/users"时,会调用getUsers()方法并返回一个用户列表。 ### 回答2: @GetMapping注解是Spring MVC框架的一个注解,它的作用是将HTTP的GET请求映射到特定的处理方法上。 当我们在控制器类的处理方法上加上@GetMapping注解时,表示该方法可以处理HTTP的GET请求。在请求到达控制器后,Spring MVC将根据请求的路径和GET请求的方法进行匹配,找到对应的处理方法,并执行该方法。 @GetMapping注解可以接受一个字符串参数,用于指定请求路径的映射规则。比如@GetMapping("/user")表示处理路径为“/user”的GET请求。这样,当我们通过浏览器访问“http://localhost:8080/user”时,Spring MVC将会调用被注解的处理方法。 使用@GetMapping注解可以使代码更加简洁,提供更加清晰的路径映射。相比于传统的配置方式,使用注解可以减少配置的工作量,并且更加直观。通过注解的方式,我们可以在控制器类定义所有的请求路径和处理方法,使代码更加可读性和可维护性。 总结来说,@GetMapping注解的作用是将HTTP的GET请求映射到特定的处理方法上,使我们能够通过简洁的代码实现路径的映射和请求的处理。它是Spring MVC框架重要的注解之一,可以提高开发效率和代码的可读性。 ### 回答3: @GetMapping注解是Spring MVC框架提供的一种HTTP请求映射注解,用于将指定的URL请求与处理方法进行映射关联。其作用主要有以下几个方面: 1. 定义HTTP的GET请求:使用@GetMapping注解可以将一个方法映射到指定的URL上,并指定该方法处理的是HTTP的GET请求。这样当客户端发送GET请求时,Spring MVC会自动将请求与对应的处理方法进行匹配。 2. 精确匹配URL路径:@GetMapping注解可以通过value或path属性指定URL的具体路径。这样可以进行精确匹配,只有当客户端请求的URL路径与注解指定的路径完全一致时,才能触发对应的处理方法。 3. 支持多路径映射:@GetMapping注解可以同时指定多个URL路径,使用数组的形式进行定义。这样可以将多个不同路径的请求映射到同一个处理方法上。 4. 支持RESTful风格的URL路径:@GetMapping注解还支持在URL路径使用占位符,以支持RESTful风格的URL设计。通过在URL路径定义占位符,可以将请求的参数值传递给处理方法进行处理。 总的来说,@GetMapping注解的作用是用来定义处理HTTP的GET请求,并将请求的URL路径与处理方法进行映射关联。通过该注解,我们可以方便的定义并处理多种不同URL路径的GET请求,提高开发效率和代码可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值