您的位置:首页 > 编程语言 > Java开发

Spring MVC 参数字段校验

2016-07-12 17:51 375 查看

Spring MVC 参数字段校验

Spring MVC 参数字段校验
校验规范

内置规则汇总

自定义校验规则

实际使用介绍
引入JAR包

基本使用介绍

结合RequestBody的使用介绍

校验规范

SR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。JSR 303 用于对Java Bean 中的字段的值进行验证。

Spring MVC 3.x之中支持 JSR-303,因此可以在控制器中对表单提交的数据方便地验证

内置规则汇总

注解支持的数据类型说明举例
@ValidAny 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定义的正则表达式匹配
@Pastjava.util.Date,java.util.Calendar检查给定的日期是否比现在早
@NullAny type必须能为null
@NotNullAny type不能为null@NotNull(message = “广告ID不可为空”)
@NotEmptyString检查字符串是否不是空(null、”“)@NotEmpty(message = “投放平台不可为空”)
@NotBlankString检查字符串是否不是空(null、”“、” “)@NotBlank(message = “不能为空字符串”)
@MinBigDecimal, BigInteger,String, byte, short, int, long检查该值是否小于或等于约束条件中指定的最大值
@MaxBigDecimal, BigInteger,String, byte, short, int, long检查该值是否小于或等于约束条件中指定的最大值@Min(value = 50, message = “广告出价不能小于0.5元”)
@Length(min=, max=)String检查字符串长度是否在约定范围内@Length(max = 20, message = “广告计划名称限制20字符”)
@Futurejava.util.Date,java.util.Calendar检查给定的日期是否比现在晚
@EmailString检查是否是有效的邮箱地址
@Digits(integer=, fraction=)BigDecimal, BigInteger, String, byte, short, int, longinteger:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数被备注参数的整数位为integer, 小数位为fraction
@DecimalMinBigDecimal, BigInteger,String, byte, short, int, long被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示
@DecimalMaxBigDecimal, BigInteger,String, byte, short, int, long被标注的值必须 不大于约束中指定的最大值. 这个约 束的参数是一个通过BigDecimal定义的最 大值的字符串表示
@AssertTrueBoolean, booleanChecks that the annotated element is true.
@AssertFalseBoolean, booleanChecks that the annotated element is false.

自定义校验规则

实际使用介绍

引入JAR包

compile 'javax.validation:validation-api:1.0.0.GA'
compile 'org.hibernate:hibernate-validator:5.2.4.Final'


基本使用介绍

请求参数对象前面加上@Valid注解, 并且后面紧随 BindingResult result(用于接收校验结果)

@RequestMapping("/updateCheckAdvert")
public void updateCheckType(@Valid UpdateAdvertStatusParam statusParam, BindingResult result,
HttpServletResponse response) {
try {
checkParam(result);
advertsService.updateCheckAdvertByAdvertId(statusParam);
exceptionSuccess(response, "审核广告成功");
} catch (Exception e) {
logger.error("updateCheckAdvert error!", e);
exceptionFailure(response, e);
}
}

public void checkParam(BindingResult result) throws TuiaManagerException {
if (result.hasErrors()) {
logger.error("[param] error, because of " + result.getFieldError());
throw new TuiaManagerException(ErrorCode.E0100002.getErrorCode(),
result.getFieldError().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 Lo
4000
ng 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)
{
logger.error("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;//......
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring spring mvc java mvc