出站 DTO 验证:在 Spring 引导中选择激活不同的验证 schema/rule

outbound DTO validation: activate distinct validation schema/rule by choice in Spring Boot

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

比如我的服务是A,我会发OutboundOrderDto给B和C,对于B来说,order.cart.shippingAddress是必须的,但是对于C来说,order.cart.billingAddress是强制性的。

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

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

后来发现可以使用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

,应谨慎使用群组

引用:

Careful with Validation Groups Using validation groups can easily become an anti-pattern since we're mixing concerns. With validation groups the validated entity has to know the validation rules for all the use cases (groups) it is used in. More on this topic in my article about Bean Validation anti-patterns.