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 校验注意点

MVCSpring

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";
    }

时间: 2024-10-10 09:35:08

JSR-303规范,Bean Validation的相关文章

JSR 303 - Bean Validation 介绍及最佳实践

JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 Java EE 6 发布,Bean Validation 作为一个重要特性被包含其中.本文将对 Bean Validation 的主要功能进行介绍,并通过一些示例来演示如何在 Java 开发过程正确的使用 Bean Validation. 1 评论: 安 大鹏, 软件工程师, IBM 杨 乐, 软件工程师, IBM 翁 志弘, 软件工程师, IBM 2011 年

JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题. 为了避免这样或那样的情况发生,最好是将验证逻辑与相应的数据模型进行绑定. 1. JSR-303 Bean Validation JSR 是Java Specification Requests 的缩写,是指向 JCP(Java Community Proces

spring mvc 采用 jsr303 bean validation 校验框架

这是一个规范,定义了一些元素来进行bean的数据校验,比如 你的model有一个 user.java ,里面有一个email,当用户注册时候要验证email是否合法. 一般做法是js前端校验,但是不安全,作为完整安全解决方案,我们必须后端校验. 表 1. Bean Validation 中内置的 constraint Constraint 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @

JSR 303 - Bean Validation 是什么?

关于 Bean Validation JSR 303 - Bean Validation 是jree6 中的一项子规范,JSR 303 - Bean Validation着重解决以下实际问题: 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必 须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的.在通常的情况下,应用程序是分层的,不同的层由不同的开发人 员来完成.很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说

JSR 303 - Bean Validation 简介及使用方法

一.JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ORM 没有任何关系. JSR 303 用于对 Java Bean 中的字段的值进行验证. Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证. 注:可以使用注解的方式进行验证 二.准备校验时使用的JAR validation-api-1.0.

SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)

JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的JSR303是专家组成员向JCP提交的第一版Bean Validation, 主流Bean Validation使用Hibernate的实现,本文使用hibernate-validator 各个版本的规范对应关系如下: JSR 380 (Bean Validation 2.0) JSR 349 (Be

Spring3.1 对Bean Validation规范的新支持(方法级别验证)

一.Bean Validation框架简介 写道 Bean Validation standardizes constraint definition, declaration and validation for the Java platform. 大体意思是:Bean Validation 标准化了Java平台的约束定义.描述.和验证. 详细了解请参考:http://beanvalidation.org/ Bean Validation现在一个有两个规范: 1.Bean Validatio

Java bean validation 规范与参考实现

1.Apache Bval 依赖包:validation-api-1.1.0.Final.jar org.apache.bval.bundle-1.1.1.jar bval-core-1.1.1.jar validator实现类:org.apache.bval.jsr.ApacheValidationProvider 2.Hibernate Validator 依赖包:validation-api-1.1.0.Final.jar hibernate-validator-5.3.0.Alpha1.

基于Java Bean Validation对Request参数进行校验的设计思路

摘自Hibernate Validator文档: 数据校验是任何一个应用程序都会用到的功能,无论是显示层还是持久层. 通常,相同的校验逻辑会分散在各个层中, 这样,不仅浪费了时间还会导致重复代码的发生. 为了避免重复, 开发人员经常会把这些校验逻辑直接写在领域模型里面, 但是这样又把领域模型代码和校验代码混杂在了一起, 而这些校验逻辑更应该是描述领域模型的元数据. JSR 303 - Bean Validation (version 1.1)- 为实体验证定义了元数据模型和API. 默认的元数据