场景:一个Bean ,需要在不同情况下分别做验证

1.依赖:springboot 已经集成

<dependency>
       <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

2.定义一个bean (验证对象)

import javax.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class XiaoMIEntry { @NotEmpty(groups={AgroupMI2.class,AgroupMI.class},message="name can't be null")
private String name; private Double price; @NotEmpty(groups={AgroupMI.class},message="color can't be null")
private String color; public XiaoMIEntry(@NotEmpty(groups = AgroupMI2.class, message = "name can't be null") String name, Double price,
@NotEmpty(groups = AgroupMI.class, message = "color can't be null") String color) {
super();
this.name = name;
this.price = price;
this.color = color;
} public XiaoMIEntry() {
super();
} }

3.定义分组(仅仅是一个接口,需要extends javax.validation.groups.Default 仅仅只是标识)

分组:1:

import javax.validation.groups.Default;

public interface AgroupMI extends Default{

}

分组:2:

import javax.validation.groups.Default;

public interface AgroupMI2 extends Default{

}

验证方法:工具类;

/***************************************************************************
*
* COPYRIGHT (c) 2004 BY INTEGRATED CONCEPTS INTERNATIONAL LIMITED.
*
* ALL RIGHTS RESERVED. NO PART OF THIS TEXT FILE MAY BE REPRODUCED, STORED IN A RETRIEVAL SYSTEM OR
* COMPUTER SYSTEM, OR TRANSMITTED IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHANICAL,
* PHOTOCOPYING, RECORDING OR OTHERWISE, WITHOUT PRIOR WRITTEN PERMISSION OF INTEGRATED CONCEPTS
* INTERNATIONAL LIMITED.
*
* Integrated Concepts International Limited 11th Broadway 64-52 Lockhart Road Wanchai, Hong Kong
* Telephone (852) 27788682 Facsimile (852) 27764515
*
***************************************************************************/
package com.icil.elsa.subscribe.milestone.common.utils; import java.util.Set; import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @ClassName: BeanValidationUtils
* @Description:
* @Author: Sea
* @Date: 14 Sep 2018 11:24:49 AM
* @Copyright: 2018 ICIL All rights reserved.
*/
public class BeanValidationUtils { private static final Logger logger = LoggerFactory.getLogger(BeanValidationUtils.class); /**
*
* @param obj
* @return
*/
public static String getBeanValidate(Object obj) {
StringBuilder validationMessage = new StringBuilder();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Object>> violations = validator.validate(obj);
for (ConstraintViolation<Object> violation : violations) {
if(violation.getMessage() != null && !"".equals(violation.getMessage())) {
validationMessage.append("<p>"+violation.getMessage()+" ;</p>");
}
}
return validationMessage.toString();
} /**
*
* @param obj:需要验证的 bean
* @param group :需要验证的分组
* @return
*/
public static String getBeanValidateByGroup(Object obj,Class<?> group) {
StringBuilder validationMessage = new StringBuilder();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Object>> violations = validator.validate(obj,group);
for (ConstraintViolation<Object> violation : violations) {
if(violation.getMessage() != null && !"".equals(violation.getMessage())) {
validationMessage.append("<p>"+violation.getMessage()+" ;</p>");
}
}
return validationMessage.toString();
} }

test :

import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.junit.runner.RunWith;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ValitionByGrouptest { @Test
public void testgroup1() throws Exception { XiaoMIEntry xiaoMIEntry = new XiaoMIEntry(null, 1.2, null); String beanValidateByGroup = BeanValidationUtils.getBeanValidateByGroup(xiaoMIEntry, AgroupMI.class);
System.out.println("###############");
System.out.println(beanValidateByGroup);
System.err.println("######################"); } @Test
public void testgroup2() throws Exception { XiaoMIEntry xiaoMIEntry = new XiaoMIEntry(null, 1.2, null); String beanValidateByGroup = BeanValidationUtils.getBeanValidateByGroup(xiaoMIEntry, AgroupMI2.class);
System.out.println("###############");
System.out.println(beanValidateByGroup);
System.err.println("######################"); }

JSR303 分組数据验证的使用的更多相关文章

  1. JSR303中的来验证数据信息

    spring mvc之实现简单的用户管理三 博客分类: spring spring mvc spring mvc dispatcherServlet springspring mvcbean vali ...

  2. SpringMVC配置数据验证(JSR-303)

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...

  3. MVC 数据验证【转】

    [转自]http://www.cnblogs.com/dozer/archive/2010/04/12/MVC-DataAnnotations.html 作者Dozer 今天在这里给大家介绍一下MVC ...

  4. SpringMVC学习系列(6) 之 数据验证

    在系列(4).(5)中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 —> 数据验证. 这里我们采用Hibernate-validator来进行验 ...

  5. 【Win10】使用 ValidationAttribute 实现数据验证

    WPF 中数据验证的方式多种多样,这里就不说了.但是,在 Windows Phone 8.1 Runtime 中,要实现数据验证,只能靠最基础的手动编写条件判断代码来实现.如果用过 ASP.NET M ...

  6. SpringMVC数据验证

    SpringMVC数据验证——第七章 注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC 资源来自:http://jinnianshilongnian.iteye.com/blo ...

  7. MVC数据验证

    深入浅出 MVC 数据验证 2.0 [附演示源码] 今天在这里给大家介绍一下MVC的数据验证框架. 在1.0版中,很多朋友提出了怎么使用客户端验证,今天找了一些资料,发现了客户端验证的方法. 1.MV ...

  8. spring(7)--注解式控制器的数据验证、类型转换及格式化

    7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...

  9. 【转】ASP.NET MVC 数据验证及相关内容

    原文地址:http://www.jb51.net/article/56713.htm 一.数据验证 数据验证的步骤在模型类中添加与验证相关的特性标记在客户端导入与验证相关的js文件和css文件使用与验 ...

随机推荐

  1. SQL Server CONVERT() 日期转换为新数据类型的 通用函数

    http://www.w3school.com.cn/sql/func_convert.asp

  2. 在Python中进行自动化单元测试的教程

    From: https://www.jb51.net/article/64119.htm 一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必 ...

  3. 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值---部分内容可能不确切,待讨论

    1.阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值  ...

  4. bzoj2856: [ceoi2012]Printed Circuit Board

    Description 给出一个N个顶点的简单多边形,对于每个顶点,假如它和原点连成的线段只在这个顶点处和多边形相交,就称为满足要求的顶点.你的任务是输出所有满足要求的顶点编号. Input 第一行一 ...

  5. hive中的表

    一.内部表与外部表的比较 Hive表概念和关系型数据库表概念差不多.在Hive里表会和HDFS的一个目录相对应,这个目录会存放表的数据.目录默认是/usr/hive/warehouse/. 比如你在h ...

  6. Python——numpy(python programming)

    np.insert(a,第几行/列,数,axis=??) sum,mean,std,var,min,max,argmin,argmax,unique np.random a=np.random.nor ...

  7. 【原创】虚拟机上实现绑定固定IP扩主机容器互访

    Docker绑定固定IP/跨主机容器互访 https://blog.csdn.net/qq_34021712/article/details/75948566 服务器IP   容器分配网段   启动容 ...

  8. 认识hasLayout——IE浏览器css bug的一大罪恶根源

     原文地址:http://neverned.blog.163.com/blog/static/1265524200933021130561/   什么是hasLayout?hasLayout是IE特有 ...

  9. MySQL事务提交过程(转载)

    http://blog.csdn.net/sofia1217/article/details/53968214 上一篇文章我们介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlo ...

  10. PHP程序员的进阶之路

    第1阶段:初级PHP程序员 重点:把LNMP搞熟练(核心是安装配置基本操作)目标:能够完成基本的LNMP环境安装,简单配置维护:能够做基本的简单系统的PHP开发:能够在PHP中型系统中支持某个PHP功 ...