`

JSR-303

阅读更多
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
  • 验证适用字段:引用类型
  • 注解说明:验证值是否需要递归验证
  • 属性说明:无


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

刚开始学着用JSR-303做验证就出现麻烦了。 昨天晚上调试了好久。

使用Spring MVC 和 JSR-303的标注做表单提交的服务器端验证时,
@Valid 标注的Command对象和BindingResult参数一定要紧挨着。要不然
数据绑定错误直接抛异常,不会封装成一个BindingResult对象。
	@RequestMapping(value="/login", method=RequestMethod.POST)
	public String login(@Valid User user, BindingResult br, Map<String, Object> model) {
		if (br.hasErrors()) {
			return "login";
		}
		return "redirect:/salary/list.do";
	}
分享到:
评论
6 楼 yingzhor 2012-10-12  
对不起,好久没有上过iteye了。 我没有用过不使用SpringMvc标签的情况。

但是,我觉得不是什么难事,建议用调试用具调试一下,HttpServletRequest 的实例。

错误信息是作为Attribute保存的。
5 楼 xisuchi 2012-10-12  
lifei2199 写道
,请问一下,spring MVC使用jsr303,将错误的提示信息返回到页面上必须使用spring的sf标签吗,能不能使用c标签?尝试无果

同问。
4 楼 lifei2199 2012-10-08  
,请问一下,spring MVC使用jsr303,将错误的提示信息返回到页面上必须使用spring的sf标签吗,能不能使用c标签?尝试无果
3 楼 baowp 2011-04-08  
可是我的确是挨在一起的,
@RequestMapping(value = "/{id}")
public String helloWorld(@PathVariable String id,
@ModelAttribute("fruit") @Valid InventoryItem fruit,
BindingResult result, HttpServletRequest request,
HttpServletResponse response, Map<String, Object> map)
2 楼 yingzhor 2011-04-07  
baowp 写道
我也是这样写的,可是bindingResult始终都没有error
org.springframework.validation.BeanPropertyBindingResult: 0 errors

请注意一下,你的要验证的对象,和BindingResult 参数是放在一起的吗?

它们必须紧挨在一起。我也吃过这个苦头,调试了好半天。
1 楼 baowp 2011-04-07  
我也是这样写的,可是bindingResult始终都没有error
org.springframework.validation.BeanPropertyBindingResult: 0 errors

相关推荐

Global site tag (gtag.js) - Google Analytics