zoukankan      html  css  js  c++  java
  • SpringBoot中在除Controller层 使用Validation的方式

    说明:Validation 在Controller层使用Validation应该都使用过了,以下方式可以使用 Validation 在Service层完成对dto的属性校验,避免写一堆的 if else 来处理这些逻辑,提高开发效率,代码如下:

    1:DTO实体类代

    @Data
    public class AddUserParamsDto implements Serializable {
    
        private Integer id;
    
        @NotEmpty(message = "用户名不能为空")
        private String username;
    
        @Length(min = 6, message = "密码长度不能小于6")
        private String password;
    
        @Max(value = 120, message = "年龄必须在18-120之间")
        @Min(value = 18, message = "年龄必须在18-120之间")
        private Integer age;
    
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date birthday;
    
        private String description;
    }
    

    2:可以将ValidatorFactory的创建放入配置类里,后期如果使用 Validation 可以直接使用Spring的IOC进行注入,实现代码重用性。

    @Configuration
    public class ValidatorConfigBean {
    
        @Bean
        public ValidatorFactory validatorFactory() {
            return Validation.byProvider(HibernateValidator.class)
                    .configure()
                    .failFast(false)
                    .buildValidatorFactory();
        }
    
        @Bean
        public Validator validator(ValidatorFactory validatorFactory) {
            return validatorFactory.getValidator();
        }
    }
    

    3:Controller层测试接口

    @RestController
    public class UserController {
    
        @Resource
        private UserService userService;
    
        @GetMapping("/test/valid")
        public Object validToService() {
            AddUserParamsDto dto = new AddUserParamsDto();
            dto.setUsername(null);
            dto.setAge(200);
            dto.setPassword("123");
            return userService.validToService(dto);
        }
    
    }
    

    4:Service层代码,可以注入ValidatorFactory手动创建Validator对象,也可直接注入Validator对象

    @Service
    public class UserServiceImpl implements UserService {
    
        @Resource
        private Validator validator;
    
        @Override
        public Object validToService(AddUserParamsDto dto) {
            List<String> list = new ArrayList<>();
            Set<ConstraintViolation<AddUserParamsDto>> violations = validator.validate(dto);
            for (ConstraintViolation<AddUserParamsDto> violation : violations) {
                list.add(violation.getMessage());
            }
            return list;
        }
    }
    
  • 相关阅读:
    1030
    Android网络:开发浏览器(二)——功能完善之长按网页图片菜单
    表达式(四则运算)计算的算法
    [置顶] 得失寸心知
    参考storm中的RotatingMap实现key超时处理
    分布式事务 & 两阶段提交 & 三阶段提交
    遗传算法
    模拟退火算法
    Mysql死锁问题解决方式 & 聚簇索引、隔离级别等知识
    Mysql表锁、行锁、页锁
  • 原文地址:https://www.cnblogs.com/gxc6/p/11407599.html
Copyright © 2011-2022 走看看