SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
来源:互联网 发布:java调用高德api例子 编辑:程序博客网 时间:2024/06/05 12:03
关于SpringMVC验证框架Validation的使用方法,不是本篇的重点,可参见博文SpringMVC介绍之Validation
在使用Validation时,一定有朋友遇到过一个问题,那就是:无法传递参数到国际化资源文件properties错误描述中。
举个例子:
User类中
@NotEmpty(message="{password.empty.error}")private String password;
资源文件validation_zh_CN.properties中为
password.empty.error=password不能为空
实际开发中,很多参数都是要验证非空的,如果每个参数都单独加个错误描述,是很麻烦的。properties虽支持“{}”的写法传递参数,但使用JSR-303注解无法实现传递参数。我想了个办法可通过自定义注解方式实现。
首先,建立个自定义的@NotEmpty注解:
package com.itkt.payment.core.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.validation.Constraint;import javax.validation.Payload;import com.itkt.payment.core.handler.NotEmptyValidator;@Retention(RetentionPolicy.RUNTIME)@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER })@Constraint(validatedBy = { NotEmptyValidator.class })public @interface NotEmpty {String field() default "";String message() default "{com.itkt.payment.core.handler.NotEmpty.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};}
自定义的NotEmpty注解中,我们新加了field字段,用于标识字段名称。
然后,建立NotNullValidator实现类:
package com.itkt.payment.core.handler;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import com.itkt.payment.core.annotation.NotNull;public class NotNullValidator implements ConstraintValidator<NotNull, Object> {@Overridepublic void initialize(NotNull annotation) {}@Overridepublic boolean isValid(Object str, ConstraintValidatorContext constraintValidatorContext) {return str != null;}}
之后,在资源文件validation_zh_CN.properties中,改变写法:
password.empty.error={field}不能为空
最后,我们就可以在User类中使用自定义的NotEmpty注解:
@NotEmpty(field = "password", message = "{password.empty.error}")private String password;
实际上,国际化资源文件本身支持从JSR-303注解中获取属性的参数值的,例如从@Length注解中,获取min和max属性的值:
username.length.error=用户名长度必须在{min}-{max}之间
之所以自带的@NotEmpty注解无法实现,是因为没有一个属性能传递字段名,所以通过自定义@NotEmpty注解来拓展个field字段。
3 3
- SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
- SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
- SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
- SpringMVC注解验证的国际化
- strutrs1的validator框架的在form中进行国际化验证,而且实现传递参数的国际化
- springMvc自定义注解验证
- SpringMVC验证框架Validation分组验证
- 自定义注解验证参数
- 简单实现SpringMVC资源国际化
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC BindingResult验证框架Validation特殊用法
- springMVC 注解参数传递方式
- springMVC中两种validation 实现接口与注解
- xcode6 GM里面模拟器设置成IP5 IOS7.1的上下黑边
- 图像基本处理算法的简单实现(一)
- 随机数字图形化测试
- 和大神们学习每天一题(leetcode)-Remove Nth Node From End of List
- eMMC的前世今生
- SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
- android 系统存在多个Launcher时,设置开机自动进入默认的Launcher
- Speex manul中文版
- linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析
- nyist 46 - 最少乘法次数
- Linux根目录”/“下各个系统文件夹的含义和用途
- android 让Launcher Hotseat中的图标显示title
- birt报表兼容性处理
- 单例模式 随记