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,因此可以在控制器中对表单提交的数据方便地验证
内置规则汇总
注解 | 支持的数据类型 | 说明 | 举例 |
---|---|---|---|
@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 | 检查给定的日期是否比现在晚 | |
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, 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包
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;//...... }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 分享微信开发Html5轻游戏中的几个坑
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序