• 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;
        }
    }
    
  • 相关阅读:
    poj1459(多源点网络流)
    poj 2480
    poj1850和poj1496(组合数)
    poj3252(组合数)
    hdu1452(逆元)
    因子和与因子个数
    poj 2478(欧拉函数打表)
    p3807(lucas定理)
    F-有趣的数字(组合数+逆元)
    《Java并发编程的艺术》Java并发机制的底层实现原理(二)
  • 原文地址:https://www.cnblogs.com/gxc6/p/11407599.html
Copyright © 2020-2023  润新知