zoukankan      html  css  js  c++  java
  • JSR303 分組数据验证的使用

    场景1: 验证UI字段

    Bean:

    @Data
    @Document(collection = "booking")
    public class Booking implements Serializable {
        
        private static final long serialVersionUID = 4648928973495587158L;
        
        private String businessType;
        @Id
        private String id;
        @NotBlank(message = "bookingNo can't be blank!")
        private String bookingNo;
        private Date bookingDateGMT;
        private Date bookingDateLoc;}

    Controller :

        @PostMapping("/insert")
        public Map<String, Object> insert(@Valid Booking booking, BindingResult bindingResult) 
        {
            Map<String, Object> map = new HashMap<String, Object>();
            if (bindingResult.hasErrors()) 
            {
                List<ObjectError> errorList = bindingResult.getAllErrors();
                List<String> mesList=new ArrayList<String>();
                for (int i = 0; i < errorList.size(); i++) 
                {
                    mesList.add(errorList.get(i).getDefaultMessage());
                }
                map.put("status", false);
                map.put("error", mesList);
            } else 
            {
                map.put("status", true);
                map.put("msg", "添加成功");
            }
            return map;
        }

    场景2:一个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();
        }
        
    }
    View Code

    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();
          }
      
      
    }
    View Code

    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("######################");
            
            
            
        }
    View Code
  • 相关阅读:
    MSDN Magazine搞错了
    Visual Studio 2005中设置调试符号(Debug Symbols)
    BCB 6的问题
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现人与身份证的一对一关系映射
    吴裕雄天生自然Spring BootSpring Data JPA
    吴裕雄天生自然Spring BootSpring Boot对JSP的支持
    吴裕雄天生自然Spring BootSpring Boot的异常统一处理
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现Author与Article的一对多关系映射
    吴裕雄天生自然Spring Boot解决 Error creating bean with name 'entityManagerFactory' defined in class path resource
    吴裕雄天生自然Spring Boot@ExceptionHandler注解和@ControllerAdvice注解
  • 原文地址:https://www.cnblogs.com/lshan/p/10313745.html
Copyright © 2011-2022 走看看