SpringMVC参数字段校验
Spring MVC 参数字段校验
校验规范
SR-303 是JAVA EE 6 中的⼀项⼦规范,叫做Bean Validation,官⽅参考实现是Hibernate Validator。JSR 303 ⽤于对Java Bean 中的字段的值进⾏验证。
Spring MVC 3.x之中⽀持 JSR-303,因此可以在控制器中对表单提交的数据⽅便地验证
内置规则汇总
注解⽀持的数据类型说明举例
@Valid Any non-primitive type
递归的对关联对象进⾏校验, 如果关联对象是个集合或者数组,那么对其中的元素进⾏递归校验, 如果是⼀个map,则对其
中的值部分进⾏校验
@Size(min=, max=)String, Collection,Map and
arrays
@Range(min=, max=)
BigDecimal,BigInteger,
String,byte, short, int,long
检查被注解的值是否在给定⼤⼩内
@Range(min=1, max=10,
message=”id必须在1-10
之间”)
@Pattern(regex=,flag=)String 检查该字符串是否能够在match指定的情况下被regex定义
的正则表达式匹配
@Past java.util.Date,java.util.Calendar检查给定的⽇期是否⽐现在早@Null Any type必须能为null
@NotNull Any type不能为null @NotNull(message =“⼴告ID不可为空”)
@NotEmpty String检查字符串是否不是空(null、”“)@NotEmpty(message =“投放平台不可为空”)
@NotBlank String检查字符串是否不是空(null、”“、” “)@NotBlank(message =“不能为空字符串”)
@Min BigDecimal, BigInteger,String,
byte, short, int, long
检查该值是否⼩于或等于约束条件中指定的最⼤值
@Max BigDecimal, BigInteger,String,
byte, short, int, long
检查该值是否⼩于或等于约束条件中指定的最⼤值
@Min(value = 50,
message = “⼴告出价不
能⼩于0.5元”)
@Length(min=, max=)String检查字符串长度是否在约定范围内
@Length(max = 20, message = “⼴告计划名称限制20字符”)
@Future java.util.Date,java.util.Calendar检查给定的⽇期是否⽐现在晚@Email String检查是否是有效的邮箱地址
@Digits(integer=, fraction=)
BigDecimal, BigInteger,
String, byte, short, int, long
integer:指定整数部分的数字的位数。fraction: 指定⼩数部
分的数字的位数被备注参数的整数位为integer, ⼩数位为
fraction
@DecimalMin BigDecimal, BigInteger,String,
byte, short, int, long
被标注的值必须不⼩于约束中指定的最⼩值. 这个约束的参
数是⼀个通过BigDecimal定义的最⼩值的字符串表⽰
@DecimalMax
bigdecimal转换为integerBigDecimal, BigInteger,String,
byte, short, int, long 被标注的值必须 不⼤于约束中指定的最⼤值. 这个约 束的参数是⼀个通过BigDecimal定义的最 ⼤值的字符串表⽰@AssertTrue Boolean, boolean Checks that the annotated element is true.@AssertFalse
Boolean, boolean
Checks that the annotated element is false.
注解
⽀持的数据类型
说明
举例
⾃定义校验规则实际使⽤介绍
引⼊JAR 包
基本使⽤介绍
请求参数对象前⾯加上@Valid注解, 并且后⾯紧随 BindingResult result(⽤于接收校验结果)
在请求参数加上各种注解, 具体注解规则可以参考内置规则汇总
compile 'javax.validation:validation-api:1.0.0.GA'compile 'org.hibernate:hibernate-validator:5.2.4.Final'
@RequestMapping ("/updateCheckAdvert")
public  void  updateCheckType (@Valid UpdateAdvertStatusParam statusParam, BindingResult result,                                HttpServletResponse response) {        try  {
checkParam(result);
advertsService.updateCheckAdvertByAdvertId(statusParam);            exceptionSuccess(response, "审核⼴告成功");        } catch  (Exception e) {
<("updateCheckAdvert error!", e);            exceptionFailure(response, e);        }    }
public  void  checkParam (BindingResult result) throws  TuiaManagerException {        if  (result.hasErrors()) {
<("[param] error, because of " + FieldError());            throw  new  TuiaManagerException(ErrorCode(),                                          FieldError().getDefaultMessage());        }    }
public class UpdateAdvertStatusParam
{
/** 审核通过 */
public static final Integer CHECK_TYPE_PASS = 0;
/** 审核拒绝 */
public static final Integer CHECK_TYPE_REFUSE = 1;
/** ⼴告ID. */
@NotNull(message = "⼴告ID不可为空")
private Long advertId;
/** 审核动作类型,0-审核通过;1-审核拒绝;. */
@NotNull(message = "审核动作类型不可为空")
@Max(value = 1, message = "审核动作类型错误")
@Min(value = 0, message = "审核动作类型错误")
private Integer checkType;
/** 审核不通过理由. */
@Length(max = 16, message = "审核不通过理由限制16汉字")
private String reason;
/** ⼴告标签列表. */
private String tagIds;
//......
}
结合RequestBody的使⽤介绍
在请求对象前加上@Valid @RequestBody, 并且后⾯紧随 BindingResult result(⽤于接收校验结果)
@RequestMapping("/pageQuery")
public void pageQuery(@Valid @RequestBody AdvertGroupVO req, BindingResult result, HttpServletResponse response)  {
try
{
checkParam(result);
exceptionSuccess(response, "查询⼴告主列表成功");
}
catch (Exception e)
{
<("pageQuery error!", e);
exceptionFailure(response, e);
}
}
在List对象参数加上@Valid注解, 这样就会继续校验BindAdvertVO对象
public class AdvertGroupVO {
/** 关联⼴告列表 */
@NotNull
@Valid
private List<BindAdvertVO> ads;
/** 投放平台. */
@NotNull(message = "投放平台不可为空") private List<String>      platform;
//......
}
public class BindAdvertVO {
/** id */
private Long id;
/** ⼴告组名称 */
@NotBlank(message = "⼴告组名称不能为空") private String adName;
/** ⼴告来源 */
@NotNull(message = "来源不能为空") private Integer adSource;//......
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。