SpringMVC利用Hibernate validator做字段验证

1.添加Hiberbate validator相关的jar包

2.字需要验证的formbean 上添加验证的注解,内置注解有:

    1. dBean Validation 中内置的 constraint  
    2.    
    3. @Null   被注释的元素必须为 null  
    4. @NotNull    被注释的元素必须不为 null  
    5. @AssertTrue     被注释的元素必须为 true  
    6. @AssertFalse    被注释的元素必须为 false  
    7. @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值  
    8. @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值  
    9. @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值  
    10. @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值  
    11. @Size(max=, min=)   被注释的元素的大小必须在指定的范围内  
    12. @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内  
    13. @Past   被注释的元素必须是一个过去的日期  
    14. @Future     被注释的元素必须是一个将来的日期  
    15. @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式  
    16.   
    17. Hibernate Validator 附加的 constraint  
    18. @NotBlank(message =)   验证字符串非null,且长度必须大于0  
    19. @Email  被注释的元素必须是电子邮箱地址  
    20. @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内  
    21. @NotEmpty   被注释的字符串的必须非空  
    22. @Range(min=,max=,message=)  被注释的元素必须在合适的范围内 

可以自己扩展。

用法例子:我们接受表单的验证bean为ProductUnityFormatModel

public class ProductUnityFormatModel {
private String productId;//产品ID

private String categoryId; //产品分类ID

private List<String> categoryName;//产品名字

private String shopCategoryId;//店铺分类ID

@Size(min = 1,max = 50,message = "<标题长度1-50字以内>")
private String productName;//产品名称

private String productCode;//产品编号

@NotNull(message = "<至少上传一张照片>")
private String[] productImgs;

@NotEmpty(message = "<发货地不为空>")
private String addrProvinceName;//所在省份

@NotEmpty(message = "<发货地省市不为空>")
private String addrProvinceCode;//所在省份code

private String addrCityName;//所在市

@NotEmpty(message = "<发货地市区不为空>")
private String addrCityCode;//所在市code

@Pattern(regexp = "[0-9]+",message = "<库存数量为纯数字>")
private String inventoryNum;//库存数量

@Pattern(regexp = "[0-9]+[.]?[0-9]*?",message = "<商品原价为纯数字或小数>")
private String marketPrice;//市场价

@Pattern(regexp = "[0-9]+[.]?[0-9]*?",message = "<微店价为纯数字或小数>")
private String salePrice;//销售价

@NotEmpty(message = "<商品的详情不为空>")
private String productDescription;//商品描述

@Pattern(regexp = "[0-9]+[.]?[0-9]*?",message = "<运费为纯数字或小数>")
private String freight;//运费

  //省略get和set方法
}


在controller中的请求方法的接受对象添加@Valid注解:(BindingResult必须紧跟着@ModelAttribute注解后面,一个不小心就就够你调试到头破还不知道为什么

@RequestMapping(value = "/product/savingProductInformation",method = RequestMethod.POST)
public String savingProductInformation(Model model,@Valid @ModelAttribute("unityFormatModel") ProductUnityFormatModel unityFormatModel, BindingResult result){
if(result.hasErrors()){
  //如果验证不通过,result.hasErrors()为true
  //todo somthing --可以带些填了的数据回去,方便回显,提供友好点的体验
  return "";//返回到字段验证失败的请求页面
}}


 

在jsp页面(用其他的渲染模板,自己查下怎么用)

可以用Spring的标签<form:errors path="填验证的formbean字段"/>如果该字段不通过验证,这个标签会显示你在验证注解中填写的message内容

posted @ 2016-07-12 16:34  玉曲风  阅读(2894)  评论(0编辑  收藏  举报