JSR 303验证相关问题及解决 办法

使用 Hibernate Validator


导入Hibernate Validator的相关jar

1483444847480.png

在相关字段属性上进行注解

@Size(min = 2, max = 6, message = "{Size.product.name}") message 可以不写,会使用默认的来自JSR 303验证器的错误消息;
如果要自定义错误消息的话,请看自定义错误消息操作步骤;

  • Product类
public class Product {
    private int id;
    
    @Size(min = 2, max = 6)
    private String name;
    
    private float price;
    private Date date;

    public Product() {
    }
    
    // 、、、getter and setter
}
  • ProductController类
@Controller
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private IProductService productService;

    @RequestMapping("/input")
    public String inputInfo(Model model) {
        model.addAttribute("product", new Product());
        return "product-add";
    }

//必须用@Valid 对Product参数进行标注

    @RequestMapping("/add")
    public String addProduct(@Valid @ModelAttribute Product product, BindingResult bindingResult, Model model) {
        if (bindingResult.hasErrors()){
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError objectError:allErrors){
                System.out.println(objectError.getDefaultMessage());
            }
            model.addAttribute("allErrors", allErrors);
            return "product-add";
        }
        productService.add(product);
        return "redirect:/product/list";
    }
    
    // 、、、、其他操作
}

效果:

默认错误提示信息.gif

以上操作就可以实现验证器验证了,不过错误消息来自JSR 303的默认错误提示消息;

下面是自定义错误提示消息的操作:

先在Resource添加属性文件,

其中ValidationMessages即 properties的名称,注意:properties文件的名字一定要命名成:ValidationMessages.properties

填入相关错误提示信息:

格式:

constraint.object.property

为了覆盖以@Size标注约束的 Product 对象的 name 属性,可以在属性文件中使用下面的键:

Size.product.name

为了覆盖以@Past标注约束的 Product 对象的 date 属性,可以在属性文件中使用下面的键:

Past.product.date

内容如下:

1483446900377.png
  • 验证器不需要显式注册,但是如果想要从某个属性文件中获取错误消息,则需要通过声明messageSource bean,高速Spring要去查找这个文件;
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="ValidationMessages"/>
    </bean>
  • 在Product更改如下
public class Product {
    private int id;
    
    @Size(min = 2, max = 6, message = "{Size.product.name}")
    private String name;
    
    private float price;
    private Date date;

    public Product() {
    }
    
    // 、、、getter and setter
}

效果:

自定义错误提示信息.gif

解决中文乱码问题

  • IntelliJ IDEA 2016设置
1483447433512.png
  • Eclipse设置
1483447647598.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,106评论 6 13
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,936评论 6 342
  • 1、简介 Laravel 提供了多种方法来验证应用输入数据。默认情况下,Laravel 的控制器基类使用Valid...
    伊Summer阅读 1,536评论 0 3
  • 序章 “1951年,夏天。日本第一艘潜水艇——黑潮号,潜入了津轻海峡。 据说从潜艇的窗户用探照灯向外照射时,看到...
    Scarlett想吃草莓大福阅读 169评论 0 0