我想将我的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验证反模式的文章。