2019独角兽企业重金招聘Python工程师标准>>>

不管是html页面表单提交的对象数据还是和第三方公司进行接口对接,都需要对接收到的数据进行校验(非空、长度、格式等等)。如果使用if一个个进行校验(字段非常多),这是让人崩溃的过程。幸好jdk或hibernate都提供了对object对象的校验,只需加上相应的注解即可。

本人喜欢学习时,都建立个maven小项目进行实践学习。

  1. 首先引入包的管理

         <dependency>  <groupId>javax.el</groupId>  <artifactId>javax.el-api</artifactId>  <version>2.2.4</version>  </dependency> <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-validator</artifactId>  <version>5.2.2.Final</version>  </dependency>
    
  2. 实现校验类并使用
    package com.sk.browser.utils;import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;  import javax.validation.ConstraintViolation;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.groups.Default;/*** 数据验证工具类
    * @author 高国藩
    * @date 2017年4月25日 上午10:32:24*/
    public class ValidatorUtil {private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();public static <T> Map<String, StringBuffer> validate(T obj) {Map<String, StringBuffer> errorMap = null;Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);if (set != null && set.size() > 0) {errorMap = new HashMap<String, StringBuffer>();String property = null;for (ConstraintViolation<T> cv : set) {property = cv.getPropertyPath().toString();if (errorMap.get(property) != null) {errorMap.get(property).append("," + cv.getMessage());} else {StringBuffer sb = new StringBuffer();sb.append(cv.getMessage());errorMap.put(property, sb);}}}return errorMap;}}
    
  3. 自定义校验类
    package com.sk.system.validator;import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;  import javax.validation.Constraint;
    import javax.validation.Payload;  /*** 定义valid管理器
    * @author 高国藩
    * @date 2017年4月25日 上午11:16:37*/
    public class CustomValidation {/***  定义金额校验* @author 高国藩* @date 2017年4月25日 上午11:06:01*/@Target({ElementType.FIELD, ElementType.METHOD})  @Retention(RetentionPolicy.RUNTIME)  @Constraint(validatedBy=MoneyValidator.class)  public @interface Money {  String message() default "金额格式不正确";  Class<?>[] groups() default {};  Class<? extends Payload>[] payload() default {};  }
    }
    
    package com.sk.system.validator;import java.util.regex.Pattern;import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;import com.sk.system.validator.CustomValidation.Money;public class MoneyValidator implements ConstraintValidator<Money, Double> {private String moneyReg = "^\\d+(\\.\\d{1,2})?$";//表示金额的正则表达式  private Pattern moneyPattern = Pattern.compile(moneyReg);  @Overridepublic void initialize(Money arg0) {}@Overridepublic boolean isValid(Double arg0, ConstraintValidatorContext arg1) {if (arg0 == null)  //金额是空的,返回true,是因为如果null,则会有@NotNull进行提示  //如果这里false的话,那金额是null,@Money中的message也会进行提示  //自己可以尝试  return true;  return moneyPattern.matcher(arg0.toString()).matches();  }}
    
  4. 校验注解汇总

其中有一个要注意的就是@NotBlack,只针对String类型有用

另外一点就是javaConfig中的springMvc配置jsr303数据类型校验不起作用的原因,还未找到,请大家明白的及时联系我,感谢了 ~~~

转载于:https://my.oschina.net/gaoguofan/blog/886640

Java JSR303 valid相关推荐

  1. Spring 3 MVC and JSR303 @Valid example

    http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/ ---------------------------- ...

  2. java JSR303 参数验证

    JSR303是JAVA EE6中的子规范. 用于对Java Bean的字段值进行校验,确保输入进来的数据在语义上是正确的,使验证逻辑从业务代码中脱离出来. JSR303是运行时数据验证框架,验证之后验 ...

  3. java which valid identifier_JAVA程序员认证模拟题及分析(2)

    JAVA程序员认证模拟题及分析(2) (2007-01-11 14:55:50) 26. Give following class: class AClass{ private long val; p ...

  4. java中如何判断一个String 是否可以强制转换成Integer

    简述 项目中有时候需要判断一个String 的字符串能不能转换成 int,我在搜索引擎上搜索到时候发现有人问过同样的问题,但是回答者会有String 怎么能转换成Integer 的疑问,这里标注一下, ...

  5. java抓取工具_抓取工具Web-Harvest - dayang2001911 - JavaEye技术网站

    Overview 总览 This section describes the motive, the notions and concepts used in Web-Harvest. 本章描述了在W ...

  6. Spring @SessionAttributes @ModelAttribute

    2019独角兽企业重金招聘Python工程师标准>>> 最近在帮企业做微信企业号的项目,关于用户查询工资条这一块的问题.只要之前有一个人查询了工资,我再查询的时候老是可以查询到他的工 ...

  7. springboot整合spring Validated

    spring Validated是基于java JSR303进一步封装,具有校验功能的框架,封装了原本的@Valid,但不同于@Valid的是他具有分组功能 依赖 <dependency> ...

  8. 【Spring】Spring Framework Reference Documentation中文版18

    Part VI. The Web This part of the reference documentation covers Spring Framework's support for the ...

  9. 谷粒商城--认证中心--高级篇笔记八

    谷粒商城–认证中心–高级篇笔记八 1. 环境搭建 1.1 新建模块gulimall-auth-server 1.2 pom文件 上面没选好直接复制下面的pom文件,记得排除gulimall-commo ...

最新文章

  1. 史上最大“云办公”实验开始,你参加了吗?
  2. Windows 编译cython nms
  3. C# 之不安全代码(2)
  4. 入门 | 一文看懂卷积神经网络
  5. CentOS7 安装 Mysql 服务
  6. JavaScriptDOM高级程序设计- generateDOM.js
  7. I2C driver编写常用接口
  8. 一个函数解决【LeetCode 买卖股票的最佳时机】系列所有题目!
  9. pthread_cond_signal只能唤醒已经处于pthread_cond_wait的线程
  10. 使用 webSocket 连接菜鸟打印(并获取当前电脑连接的打印机信息)
  11. 两种方法,word文件转换成PDF文件
  12. 陀螺仪、加速计、磁力计
  13. linux格式化u盘给win7,u盘一直显示格式化在虚拟机上安装win7系统怎么安装linux
  14. 使用Adb shell dumpsys检测Android的Activity任务栈
  15. 节后安全生产会议记要
  16. 计算机 黑屏 显示桌面,电脑开机后显示桌面黑屏了怎么处理啊?
  17. MT 101 Request for Transfer转账请求
  18. DPU网络开发SDK—DPDK(六)
  19. html左侧导航栏点击下拉菜单,HTML+CSS实现下拉菜单
  20. java 下载 1.7_JDK1.7免安装版

热门文章

  1. twisted系列教程十九–cancel deferred
  2. 15.IDA-查看XREF列表(Ctrl+x)
  3. Java 随心笔记7
  4. Oracle死锁情况
  5. Eclipse的PyDev插件安装及解决安装后找不到的问题
  6. 修改myeclipse字体与操作系统的字体一致
  7. [HNOI2008 Tree]
  8. aswing学习笔记4-通过调用面板中的按钮实现主界面动态切换皮肤的问题!
  9. 《AI技术人才成长路线图》:完整版PPT及要点解读
  10. 程序员千万不要做舔狗啊!