SpringMVC利用Hibernate validator做字段验证

时间:2023-03-09 13:34:55
SpringMVC利用Hibernate validator做字段验证

1.添加Hiberbate validator相关的jar包

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

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