如何自定义JSR-303标准的validator

在web应用中为了保证数据的有效性而对用户提交的表单数据是必需的,而前台客户端的验证例如javascript并不总是那么安全和可靠,这样我们就需要一个健壮的后台验证框架来处理这个问题。好在java发布了JSR-303接口标准,而实现这一标准的有很多供应商,Hibernate Validator验证框架是使用得比较多的。

今天在处理用户提交的身份证号码这个表单域遇到了一个问题,大家知道我们的身份证号码早期版本只有15位,而二代身份证号码都是18位,Hibernate Validator的@Size注解只能处理最少多少位至最多多少位,却不能处理15位或18位这种情况,于是乎,我就想到了需要使用自定义注解validator来解决这个问题。

首先我们需要定义一个Annotation:

@Documented
@Constraint(validatedBy = { IDConstraintValidator.class })
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IDValidator {

	String message() default "{id}";

	Class<?>[] groups() default {};

	Class<? extends Payload>[] payload() default {};

}

然后定义一个类用来处理具体的验证逻辑:

 1 public class IDConstraintValidator implements ConstraintValidator<IDValidator, String> {
 2
 3     @Override
 4     public void initialize(IDValidator idValidator) {
 5
 6     }
 7
 8     @Override
 9     public boolean isValid(String id, ConstraintValidatorContext ctx) {
10         int length = id.length();
11         if (isNumeric(id) && (length == 15 || length == 18)) {
12             return true;
13         }
14         return false;
15     }
16 }

最后在pojo类上面应用我的注解:

 1 public abstract class Person implements Serializable {
 2
 3     private static final long serialVersionUID = 1L;
 4
 5     @IDValidator(message="{person.id.invalid}")
 6     private String id;
 7
 8     private String firstName;
 9
10     private String lastName;
11
12     private String gender;
13
14     private int age;
15
16     public String getId() {
17         return id;
18     }

我把错误信息放在资源文件里面,省去页面测试描述,但是我把Controller里面打印的错误信息展示出来了:

时间: 2024-10-07 18:04:08

如何自定义JSR-303标准的validator的相关文章

JSR 303标准

JSR 303是Java为bean数据合法性校验提供的标准框架,JSR 303通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则,并通过标准的校验接口对bean进行验证.可用注解的列表如下:

SpringMVC中的 JSR 303 数据校验框架说明

JSR 303 是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0中. JSR 303 通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则, 并通过标准的验证接口对Bean进行验证: --------------------------------------------------------------------------- 注解 说明 ---------------------------------------------

使用JSR 303和AOP简化你的接口开发

本文出处:http://blog.csdn.net/chaijunkun/article/details/44854071,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文. 前言 如今互联网项目都采用HTTP接口形式进行开发.无论是Web调用还是智能设备APP调用,只要约定好参数形式和规则就能够协同开发.返回值用得最多的就是JSON形式.服务端除了保证正常的业务功能,还要经常对传进来的参数进行验证,例如某些参数不能为空,字符串必须含有可见字符,数值

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 简介及使用方法

一.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.

JSR 303 - Bean Validation 是什么?

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

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

SpringMVC框架整理(二)

SpringMVC框架整理第二发,数据绑定流程,数据校验(错误信息国际化),拦截器,异常处理. 数据绑定流程(数据转换,数据格式化,数据校验) 1. Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 2. DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换.数据格式化工作.将 Servlet

SpringMVC 学习笔记

Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一. Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架. Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. Spring MVC 支持 REST 风格的 URL 请求. Spring MVC 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性. Spring MVC 处理请求的大致过程: 使用 S