• 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;
        }
    }
    
  • 相关阅读:
    pyCharm最新2018激活码
    pycharm fiddler requests.exceptions.SSLError
    耐克的毛毛虫
    ROS-RouterOS hAP ac2+usb 4G上网卡+小米新推的无线上网卡是绝配
    TOM带你玩充电 篇三:15款5号电池横评及选购建议——南孚金霸王小米宜家耐时品胜一个都逃不了
    关于DELL服务器如果采购散件,进行服务器升级的相关说明
    开通微信零钱通的方法微信免手续费提现
    近期给朋友推荐的笔记本型号
    江苏中石化加油卡积分的几种类别
    Selenium geckodriver异常
  • 原文地址:https://www.cnblogs.com/gxc6/p/11407599.html
Copyright © 2020-2023  润新知