【发布时间】:2019-06-09 09:16:20
【问题描述】:
我正在将来自 Kafka 的数据消耗到一个 bean 类中,该类具有验证以确保我正在阅读的消息具有有效数据。
我在 bean 类中添加了注释,例如 @NotNull 和 @Pattern,但没有得到应用。
public class Class {
@NotNull
private String field1;
@Pattern(regexp = "^Open$|^Active$|^Overdue$|^Inactive$")
private String field2;
}
如何确保应用 bean 验证,我之前在创建 REST 服务时使用了 @RequestBody @Valid 但不确定如何在这种情况下应用。
【问题讨论】:
-
您是否使用
BindingResult result跟进请求正文属性。 bean 定义的错误将在BindingResult中。检查result.hasErrors()是否有任何bean错误 -
我建议使用 avro 模式并让反序列化程序处理无效消息。由于没有客户可以报告,因此跟踪验证错误是没有意义的。
-
@ManishBansal 我之前使用的是 Avro 模式,但必须在我实现 kafka 客户端 Deserializer 类的地方切换自定义反序列化器。
-
Kafka 用于 B2B 通信目的。消息是由您自己的其他服务或第三方服务生成的。因为,它不是用户输入的数据,在这两种情况下,它都是有效的数据。为什么要验证这一点?您可以与消息生产者签订合同,如果无法反序列化消息,则忽略该消息。请在这里告诉我您的用例。
标签: java spring-boot hibernate-validator spring-validator