当前位置: 首页 > news >正文

Spring类字段验证

引用的jar

	<!--对象效验器  -->
				<dependency>
				    <groupId>org.hibernate</groupId>
				    <artifactId>hibernate-validator</artifactId>
				    <version>5.4.1.Final</version>
				</dependency>
				<dependency>
				    <groupId>javax.validation</groupId>
				    <artifactId>validation-api</artifactId>
				    <version>1.1.0.Final</version>
				</dependency>
				<dependency>
				    <groupId>org.jboss.logging</groupId>
				    <artifactId>jboss-logging</artifactId>
				    <version>3.3.0.Final</version>
				</dependency>
				<dependency>
				    <groupId>com.fasterxml</groupId>
				    <artifactId>classmate</artifactId>
				    <version>1.0.0</version>
				</dependency>
				<dependency>
			   		<groupId>javax.el</groupId>
				    <artifactId>javax.el-api</artifactId>
				    <version>2.2.4</version>
				</dependency>
				<dependency>
				   <groupId>org.glassfish.web</groupId>
				   <artifactId>javax.el</artifactId>
				   <version>2.2.4</version>
				</dependency>

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
 
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <!--只有一个时可以省略    <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>  -->
     <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
    </bean>
 
	
</beans>

工具类

package com.feizhou.common.tools.commonTools;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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;

import com.feizhou.common.exception.MyException;
 
public class ValidatorUtil {
    private static Validator validator = Validation.buildDefaultValidatorFactory()
            .getValidator();
    /**
     * 
     * @Description (验证对象的注解)
     * @author feizhou
     * @Date 2018年7月2日下午5:04:04  
     * @version 1.0.0
     * @param obj
     * @return
     */
    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;
    }
    
    /**
     * 
     * @Description (检测对象是否有错误,有错误抛出异常)
     * @author feizhou
     * @Date 2018年7月2日下午1:49:24  
     * @version 1.0.0
     * @param obj
     * @return
     */
    public static <T> String validateThrowE(T obj){
    	
    	Map<String,StringBuffer> errorMap= validate(obj);
    	List<StringBuffer> list=new ArrayList<StringBuffer>();
    	if(StringUtil.isNotEmpty(errorMap)){//有错误
    		Set<String> keys = errorMap.keySet();
    		for (String key : keys) {
    			list.add(errorMap.get(key));
			}
    	} 
		if(StringUtil.isNotEmpty(list)){
			throw new MyException(list.toString());	
		 }
		return null;
    }
 
   
}

测试

 

demo类

package com.feizhou.core.bean.demo;

import java.util.Date;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import com.feizhou.common.tools.commonTools.ValidatorUtil;

public class DemoQuery {
		@Max(value=12,message = " 部门id必须小于12")
	   private Integer departmentID;// 部门id
		@Pattern(regexp = "\\S{6,30}",message = "部门父id必须在6-30之间")
	    private String parentID; // 部门父id
		@Pattern(regexp = "^((1[3,5,8][0-9])|(14[5,7])|(17[0,6,7,8])|(19[7]))\\d{8}$",message = "用户名输入错误")
	    private String name;//部门名称
//	    @Max(value = 100,message = "部门编码必须小于100")
//	    @Min(value = 18,message = "部门编码必须大于18")
	    private Integer code;// 部门编码
//	    @Size(max = 4,min=1,message = "备注大小不能超过4")
	    @Max(value = 100,message = "备注必须小于100")
	    @Min(value = 18,message = "备注必须大于18")
	    private String remarks;// 备注
	    private Boolean isActive; // 是否激活 
//	    @Past(message="创建日期必须小于当前日期")
	    private Date createDate; // 创建日期
	    @NotNull(message = "密码不能为空")
	    @Size(max = 4,message = "密码大小不能超过4")
	    private String pass;//密码
	    
		public DemoQuery(Integer departmentID, String parentID, String name, Integer code, String remarks,
				Boolean isActive, Date createDate, String pass) {
			super();
			this.departmentID = departmentID;
			this.parentID = parentID;
			this.name = name;
			this.code = code;
			this.remarks = remarks;
			this.isActive = isActive;
			this.createDate = createDate;
			this.pass = pass;
		}
		public String getPass() {
			return pass;
		}
		public void setPass(String pass) {
			this.pass = pass;
		}
		public Integer getDepartmentID() {
			return departmentID;
		}
		public void setDepartmentID(Integer departmentID) {
			this.departmentID = departmentID;
		}
		public String getParentID() {
			return parentID;
		}
		public void setParentID(String parentID) {
			this.parentID = parentID;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Integer getCode() {
			return code;
		}
		public void setCode(Integer code) {
			this.code = code;
		}
		public String getRemarks() {
			return remarks;
		}
		public void setRemarks(String remarks) {
			this.remarks = remarks;
		}
		public Boolean getIsActive() {
			return isActive;
		}
		public void setIsActive(Boolean isActive) {
			this.isActive = isActive;
		}
		public Date getCreateDate() {
			return createDate;
		}
		public void setCreateDate(Date createDate) {
			this.createDate = createDate;
		}
		@Override
		public String toString() {
			return "DemoQuery [departmentID=" + departmentID + ", parentID=" + parentID + ", name=" + name + ", code="
					+ code + ", remarks=" + remarks + ", isActive=" + isActive + ", createDate=" + createDate + "]";
		}
		public DemoQuery() {
			super();
		}
	    
		public static void main(String[] args) {
			  DemoQuery fsre=new DemoQuery();
			  fsre.setPass("11122");
			 ValidatorUtil.validateThrowE(fsre);
		}
	 
}

输出

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" com.feizhou.common.exception.MyException: [密码大小不能超过4]
    at com.feizhou.common.tools.commonTools.ValidatorUtil.validateThrowE(ValidatorUtil.java:68)
    at com.feizhou.core.bean.demo.DemoQuery.main(DemoQuery.java:106)
 

 

controler测试

	@RequestMapping(value = "/demoController/selectList.do")
	public void selectList(HttpServletResponse response,HttpServletRequest resquest,
			@Valid DemoQuery demoQuery, 
			BindingResult bindingResult,
			Model model){//@Valid注解对user进行校验,并将校验结果保存在bindingResult中,
//		@Valid后面必须紧跟indingResult/Errors类型,中间没有其他参数,它们总是成对出现。
	        if(bindingResult.hasErrors()){
	            List<ObjectError> errors=bindingResult.getAllErrors();
	            
	            System.out.println("开始打印错误信息:"+errors);
	           for (ObjectError objectError : errors) {
	        	   System.out.println("Code:"+objectError.getCode());
	        	   System.out.println("DefaultMessage:"+objectError.getDefaultMessage());
	        	   System.out.println("ObjectName():"+objectError.getObjectName());
	        	   System.out.println("Arguments:"+objectError.getArguments());
	        	   
			}
	        } 
	     System.out.println("代码继续走下去");
		
	}
	

结果

2018-07-19 14:03:04,077 [http-bio-8080-exec-6] DEBUG [org.springframework.web.servlet.DispatcherServlet] - DispatcherServlet with name 'SpringMVC' processing GET request for [/demoController/selectList.do]
  2018-07-19 14:03:04,077 [http-bio-8080-exec-6] DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] - Looking up handler method for path /demoController/selectList.do
  2018-07-19 14:03:04,077 [http-bio-8080-exec-6] DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] - Returning handler method [public void com.feizhou.core.controller.DemoController.selectList(javax.servlet.http.HttpServletResponse,javax.servlet.http.HttpServletRequest,com.feizhou.core.bean.demo.DemoQuery,org.springframework.validation.BindingResult,org.springframework.ui.Model)]
  2018-07-19 14:03:04,077 [http-bio-8080-exec-6] DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Returning cached instance of singleton bean 'demoController'
  2018-07-19 14:03:04,078 [http-bio-8080-exec-6] DEBUG [org.springframework.web.servlet.DispatcherServlet] - Last-Modified value for [/demoController/selectList.do] is: -1
  开始打印错误信息:[Field error in object 'demoQuery' on field 'pass': rejected value [null]; codes [NotNull.demoQuery.pass,NotNull.pass,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [demoQuery.pass,pass]; arguments []; default message [pass]]; default message [密码不能为空]]
Code:NotNull
DefaultMessage:密码不能为空
ObjectName():demoQuery
Arguments:[Ljava.lang.Object;@3d5ae7c9
代码继续走下去
2018-07-19 14:03:04,080 [http-bio-8080-exec-6] DEBUG [org.springframework.web.servlet.DispatcherServlet] - Null ModelAndView returned to DispatcherServlet with name 'SpringMVC': assuming HandlerAdapter completed request handling
  2018-07-19 14:03:04,080 [http-bio-8080-exec-6] DEBUG [org.springframework.web.servlet.DispatcherServlet] - Successfully completed request
  

 

转载于:https://www.cnblogs.com/feiZhou/p/9343980.html

相关文章:

  • 再谈GC3:GC调优思路与常用工具
  • LaTex in Markdown
  • css系列之关于字体的事
  • Linux 下 项目管理
  • 蛤车1:两个习题,群作用与覆叠空间,N-S定理
  • Vue学习第二天
  • 想熟悉PostgreSQL?这篇就够了
  • Kotlin Weekly 中文周报 —— 103
  • 洛谷P2765 魔术球问题(贪心 最大流)
  • Linux鸟哥(总)
  • JQuery 选择器与过滤器(随手笔记)
  • python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
  • Django - 一对多数据示例
  • Apache 年度报告:Java 是项目开发使用最多的语言
  • SendSms短信发送相关记录
  • 收藏网友的 源程序下载网
  • [译] 怎样写一个基础的编译器
  • 30秒的PHP代码片段(1)数组 - Array
  • IndexedDB
  • java8 Stream Pipelines 浅析
  • javascript数组去重/查找/插入/删除
  • js数组之filter
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Python连接Oracle
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何学习JavaEE,项目又该如何做?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • (4)STL算法之比较
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pytorch进阶之路)扩散概率模型
  • (补)B+树一些思想
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (独孤九剑)--文件系统
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net(C#)中String.Format如何使用
  • .net流程开发平台的一些难点(1)
  • @Service注解让spring找到你的Service bean
  • [2010-8-30]
  • [ACTF2020 新生赛]Include
  • [Android] Upload package to device fails #2720
  • [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv
  • [Hive] 常见函数
  • [HNOI2018]排列
  • [IDF]啥?
  • [leetcode top100] 0924 找到数组中消失的数,合并二叉树,比特位计数,汉明距离
  • [oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux
  • [PHP] 代码重用与函数
  • [SSD综述1.8] 固态存储市场发展分析与预测_固态存储技术发展方向(2022to2023)
  • [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper