JSR-303规范,Bean Validation

2024-06-15 08:08
文章标签 bean 303 规范 validation jsr

本文主要是介绍JSR-303规范,Bean Validation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一:

JSR 303是Java EE 6中的一项子规范,叫做Bean Validation,官方参考实现是hibernate Validator,此实现与Hibernate ORM没有任何关系。JSR 303用于对Java Bean中的字段的值进行验证。

本教程翻译自Hibernate Validator 4.0 GA指南,并参考JSR 303的规范,本着尽量不用JSR规范之外的特性,文档在编写时尽量不提及底层实现Hibernate Validator,而是关注Bean Validation规范本身。如果有不对之处,请大家多提意见,互相提高,谢谢! 小弟编写的中文手册在压缩包中,和Hibernate Validator 4.0 GA放在一起,省得大家再下载jar文件了哦!嘿嘿!

那个大家多提意见哦!谢谢!哈!

文章source:http://www.iteye.com/topic/500928

hibernate-validator-4.0.0.GA-dist.zip (4.8 MB)下载地址:    http://dl.iteye.com/topics/download/d3374bdc-5a36-3270-8ffc-624356cf0716

二:

 JSR-303 是Java EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。
此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。

spring MVC 3.x之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。

JSR 303内置的约束规则:

@AssertTrue / @AssertFalse

  • 验证适用字段:boolean
  • 注解说明:验证值是否为true / false
  • 属性说明:-

@DecimalMax / @DecimalMin
  • 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
  • 注解说明:验证值是否小于或者等于指定的小数值,要注意小数存在精度问题
  • 属性说明:公共

@Digits
  • 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
  • 注解说明:验证值的数字构成是否合法
  • 属性说明:integer:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数。

@Future / @Past
  • 验证适用字段:Date,Calendar
  • 注解说明:验证值是否在当前时间之后 / 之前
  • 属性说明:公共

@Max / @Min
  • 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
  • 注解说明:验证值是否小于或者等于指定的整数值
  • 属性说明:公共

@NotNull / @Null
  • 验证适用字段:引用数据类型
  • 注解说明:验证值是否为非空 / 空
  • 属性说明:公共

@Pattern
  • 验证适用字段:String
  • 注解说明:验证值是否配备正则表达式
  • 属性说明:regexp:正则表达式flags: 指定Pattern.Flag 的数组,表示正则表达式的相关选项。

@Size
  • 验证适用字段:String,Collection,Map,数组
  • 注解说明:验证值是否满足长度要求
  • 属性说明:max:指定最大长度,min:指定最小长度。

@Valid
  • 验证适用字段:引用类型
  • 注解说明:验证值是否需要递归验证
  • 属性说明:无


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


使用Spring MVC 和 JSR-303的标注做表单提交的服务器端验证时,
@Valid 标注的Command对象和BindingResult参数一定要紧挨着。要不然
数据绑定错误直接抛异常,不会封装成一个BindingResult对象。
Java代码
@RequestMapping(value="/login", method=RequestMethod.POST)   
  1. public String login(@Valid User user, BindingResult br, Map<String, Object> model) {   
  2.     if (br.hasErrors()) {   
  3.         return "login";   
  4.     }   
  5.     return "redirect:/salary/list.do";   
  6. }  

下:

 

三: 

spring 3 mvc BindingResult result 校验注意点

MVC Spring

BindingResult result 的使用,必须在controller层增加@ModelAttribute("fundsPreTransfer") 它和ModelAttribute同时使用,并且参数要紧挨着。这样才不会报。Errors/BindingResult argument declared without preceding model attribute异常。

 

 

注意:

@RequestMapping("/funds/transfer/save")
    public String save(
            @ModelAttribute("fundsPreTransfer") FundsPreTransfer fundsPreTransfer,
            BindingResult result, Model model, HttpServletRequest request) {

        // 服务器端校验
        fundsTransferValidator.validate(fundsPreTransfer, result);
        if (result.hasErrors()) {
            // 如果存在错误,则跳转到显示页面
            return "funds/transfer/show";
        }

        Double transferAmount = fundsPreTransfer.getTransferAmount();
        String comments = fundsPreTransfer.getComments();

        fundsPreTransfer.setTransferIp(request.getRemoteAddr());
        // query fundsSerialNumber
        String fundsSerialNumber = RandomStringUtils.random(9, false, true);
        fundsPreTransfer.setFundsSerialNumber(fundsSerialNumber);// 设置流水号
        // 保存转账记录。
        fundsPreTransferService.persist(fundsPreTransfer, getUsername(),
                transferAmount);

        // 传递值到下一页面。
        String fundsAccount = request.getParameter("fundsAccount");// 资金账号
        model.addAttribute("fundsAccount", fundsAccount);
        model.addAttribute("counterpartyFundsAccount",
                request.getParameter("counterpartyFundsAccount"));
        // 查出username
        FundsBase fundsBase = fundsBaseService.findByFundsAccount(fundsAccount);
        BaseAccount baseAccount = fundsBase.getBaseAccount();
        String username = baseAccount.getUsername();
        model.addAttribute("username", username);
        model.addAttribute("transferAmount", transferAmount);
        model.addAttribute("comments", comments);
        model.addAttribute("fundsSerialNumber", fundsSerialNumber);

        return "funds/transfer/show_next";
    }

这篇关于JSR-303规范,Bean Validation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062891

相关文章

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Spring实现Bean的初始化和销毁的方式

《Spring实现Bean的初始化和销毁的方式》:本文主要介绍Spring实现Bean的初始化和销毁的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Bean的初始化二、Bean的销毁总结在前面的章节当中介绍完毕了ApplicationContext,也就

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名