出站DTO验证:在Spring Boot中选择激活不同的验证模式/规则



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

例如,我的业务是A,我将OutboundOrderDto发送给B和C,对于B, order.cart.shippingAddress是强制的,而对于C, order.cart.billingAddress是强制的。

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

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

后来我发现可以使用验证组,如文档中所示:

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

:

小心验证组使用验证组很容易成为反模式,因为我们混合了关注点。对于验证组,被验证的实体必须知道它所使用的所有用例(组)的验证规则。关于这个主题的更多内容,请参阅我关于Bean验证反模式的文章。

相关内容

  • 没有找到相关文章

最新更新