springmvc校验

项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。 

服务端校验:

         控制层conroller:校验页面请求的参数的合法性。

         业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。

         持久层dao:一般是不校验的。

springmvc使用hibernate的校验框架validation,需要下载Hibernate Validation的jar包

一、下载方法

  1、下载地址:https://sourceforge.net/projects/hibernate/files/hibernate-validator/

  2、点击要下载文件名

  3、点击即可下载

  4、解压找到jar包,在dis目录下的Hibernate-validator的核心组件

  Hibernate-validator依赖的必须组件

二、Hibernate-validator应用

  开发思想:页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面

  开发步骤:

    Ⅰ、jar包

      Hibernate-validator的核心组件和必须组件

    Ⅱ、配置校验器

    Ⅱ、校验器注入到处理器适配器中    

<mvc:annotation-driven validator="validator"/>

    Ⅲ、添加校验规则

public class Items {
    private Integer id;

    //校验名称在1到30字符中间
    //message是提示校验出错显示的信息
    @Size(min=1,max=30,message="{items.name.length.error}")
    private String name;

    private Float price;

    private String pic;

    //非空校验
    @NotNull(message="{items.createtime.isNUll}")
    private Date createtime;

    Ⅳ、CustomerValidationMessage.properties

      在CustomValidationMessages.properties配置校验错误信息

#添加校验错误提交信息
items.name.length.error=请输入1到30个字符的商品名称
items.createtime.isNUll=请输入 商品的生产日期

    Ⅴ、捕获校验错误信息

@RequestMapping("/editItemsSubmit")
    public String editItemsSubmit(Model model,@Validated ItemsCustom itemsCustom,BindingResult bindingResult) throws Exception {

在需要校验的参数前边添加@Validated,并在其后添加BindingResult bindingResult接收校验出错信息

注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)

    Ⅵ、页面显示校验错误信息

      ①、将校验错误信息渲染到request域中,并返回页面

    @RequestMapping("/editItemsSubmit")
    public String editItemsSubmit(Model model,@Validated ItemsCustom itemsCustom,BindingResult bindingResult) throws Exception {
        // 获取校验错误信息
        if (bindingResult.hasErrors()) {
            // 输出错误信息
            List<ObjectError> allErrors = bindingResult.getAllErrors();

            for (ObjectError objectError : allErrors) {
                // 输出错误信息
                System.out.println(objectError.getDefaultMessage());

            }
            // 将错误信息传到页面
            model.addAttribute("allErrors", allErrors);
            
            
            //可以直接使用model将提交pojo回显到页面
            model.addAttribute("items", itemsCustom);
            
            // 出错重新到商品修改页面
            return "items/editItems";
        }

      ②、校验错误信息显示到页面

<!-- 显示错误信息 -->
<c:if test="${allErrors!=null }">
    <c:forEach items="${allErrors }" var="error">
        ${ error.defaultMessage}<br/>
    </c:forEach>
</c:if>

三、校验分组

在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验可能不同,这时候就需要通过分组的方式来区分哪些方法使用对应的校验。

分组:其实是一个java接口,并且接口中不需要定义任何方法

  Ⅰ、定义分组

public interface ValidGroup1 {

}

  Ⅱ、校验规则中添加分组

    //groups:此校验属于哪个分组,groups可以定义多个分组
    @Size(min=1,max=30,message="{items.name.length.error}", groups = ValidGroup1.class)
    private String name;

  Ⅲ、controller方法使用指定分组的校验

    @RequestMapping("/editItemsSubmit")
    public String editItemsSubmit(Model model,@Validated(value= {ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult) 
            throws Exception {

  Ⅳ、结果

  

 

posted @ 2021-07-19 13:30  一杯水M  阅读(107)  评论(0编辑  收藏  举报