【问题标题】:outbound DTO validation: activate distinct validation schema/rule by choice in Spring Boot出站 DTO 验证:在 Spring Boot 中选择激活不同的验证模式/规则
【发布时间】:2021-01-14 15:24:03
【问题描述】:

我想将我的Order 映射到不同的 dto 以供下游服务使用。它们接受相同的 DTO,但需要不同的字段。

例如,我的服务是 A,我会向 B 和 C 发送OutboundOrderDto,对于 B,order.cart.shippingAddress 是强制性的,但对于 C,order.cart.billingAddress 是强制性的。

如何使用 Spring Boot JSR 303 验证并为每个服务激活不同的规则,以便在方法 sendOutbound(OutboundOrderDto dto) 中,我只需在 arg 前添加 @Validated 即可捕获可能为空的字段错误并停止发送?

我现在看到的只是定义 2 个 DTO,但我认为也许有更简单的方法。

【问题讨论】:

标签: java spring bean-validation


【解决方案1】:

后来发现可以使用validation group,如文档中所说:

https://beanvalidation.org/1.0/spec/#constraintdeclarationvalidationprocess-groupsequence

并且,正如@areus 所建议的,应谨慎使用群组,根据https://reflectoring.io/bean-validation-with-spring-boot/#using-validation-groups-to-validate-objects-differently-for-different-use-cases

引用:

小心验证组 使用验证组很容易成为一种反模式,因为我们混合了关注点。对于验证组,经过验证的实体必须知道它所使用的所有用例(组)的验证规则。有关此主题的更多信息,请参见 my article about Bean Validation anti-patterns

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多