【问题标题】:Spring Boot Best approach for validation in facadeSpring Boot 外观验证的最佳方法
【发布时间】:2021-06-28 20:23:24
【问题描述】:

我将 Spring Boot 与 Kotlin 一起使用,我的项目被拆分为模块,其中我有带有 REST 控制器和外观的应用层、带有服务和业务逻辑的域层以及用于与外部服务或 DB 通信的基础设施层。我认为(但我可能是错的)基本验证(如 notNull、notEmpty、max 和 min、size 等)的最佳位置是外观,因为 REST 控制器和另一个模块都与它通信,但问题是 javax 验证注释像@Valid 仅适用于 REST 控制器层(在带有注释 @RestController 的类中),当我尝试为此外观创建一些测试时,具有错误值的字段返回 NullPointerException 而不是 MethodArgumentNotValidException。我试图创建 WebMvcTest 但也返回错误的异常。这是解决方案吗?我看到我可以在方法内部调用一些验证器,但它看起来比方法参数上的注释要复杂得多。

【问题讨论】:

    标签: spring-boot kotlin design-patterns architecture


    【解决方案1】:

    您可以将javax.validation.Validator 注入任何 Spring 组件。例如,进入一个门面组件,并在门面层进行验证:

    @Autowired
    Validator validator;
    
    Set<ConstraintViolation<UserRequestDTO>> violations = validator.validate(userRequest);
    

    这样您就可以完全从控制器中删除@Valid 注释。这种方法可以让您控制验证结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-14
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2011-06-03
      • 2016-02-03
      相关资源
      最近更新 更多