当前位置: 首页 > 知识库问答 >
问题:

@@KafkaHandler上的有效@Payload–bug或缺少功能?

逑俊楚
2023-03-14

我们将Spring Kafka与Spring Boot(所有最新版本)结合使用。我们将Kafka消息的处理转换为KafkaHandler注释方法,并期望有效的验证方法和有效的有效载荷能够确保有效载荷的验证,但事实并非如此。此功能适用于KafkaListener,是否也适用于KafkaHandler?

@KafkaListener(...)
@Component
public class NotificationListener {

    @KafkaHandler
    public void handleV1(@Payload @Valid NotificationV1 notification) {

非常感谢。

共有2个答案

康秋月
2023-03-14

KafkaListener与Valid注释一起工作的原因是,它就像restful控制器endpoint一样,是服务的入口。该团队致力于为这些情况下的验证工作添加支持,可以发现该验证机制是在2018年添加的。

至于@KafkaHandler,我对spring-kafka不太熟悉,但如果验证不起作用,那只是意味着团队不添加对这种情况的支持。我建议您使用Spring Boot方法验证功能,它适用于所有Spring托管bean和所有标准验证注释,例如@size。最后一件事,小心验证失败时抛出的异常。

羊舌青青
2023-03-14

在这种情况下不应用Validator,因为我们只是没有为此目的访问PayloadMesodArgumentResolver

多方法@KafkaListener的目标有效负载在我们调用该方法之前被解析,因为我们肯定需要知道要调用哪个方法。这样的逻辑在InvocableHandlerM中完成ethod.get方法()

        args[i] = findProvidedArgument(parameter, providedArgs);
        if (args[i] != null) {
            continue;
        }
        ...
        try {
            args[i] = this.resolvers.resolveArgument(parameter, message);
        }

验证程序功能是在那些解析程序中完成的。findProvidedArgument()为我们提供了之前为执行而转换的负载,这里我们只是不检查参数上的任何注释。

当我们选择了一个处理程序并且在调用它之前,我们可能需要将验证逻辑轮询到DelegatingInvokableHandler中。。。

请随时提出GitHub问题,这样我们就不会忘记这需要以某种方式加以解决。

 类似资料:
  • 我正在尝试为我的容器配置网络选项,但在尝试以下命令时: 我得到以下结果: root@Server02:/var/lib#lxc网络创建测试br0 用法:lxc[选项] 检查可用命令列表,我不认为网络是一个选项 以下是我看到的可用命令: 配置,复制,删除,执行,文件,手指,图像,信息,初始化,启动,列表,监控,移动,暂停,配置文件,发布,远程,重启,恢复,快照,启动,停止,版本 我正在使用Ubunt

  • 我试图通过DropBox系列中提供的API启用Dropbox操作 这里是生成的url: https://api.dropbox.com/1/metadata/sandbox/public/2WayServiceOverview.pdf?oauth_consumer_key=XXXXXX 当然有些数据我替换不分享所有:-) 授权通过后,我获得访问代码,然后得到{“错误”:“无效或缺少签名”} 文件p

  • 环境: Selenium webdriver,TestNG,Maven 当我运行我的脚本时,我得到了这个错误: org.openqa.selenium.WebDriverException:未知错误:丢失或无效的'entry.level'(会话信息:chrome=63.0.3239.132)(驱动程序信息:chrome驱动程序=2.29.461591(62ebf098771772160f391d7

  • 我正在设置一个spring boot应用程序,其中日志被发送到google cloud stackdriver。我正在使用logback appender进行堆栈驱动程序日志记录,并使用其文档中的logback文件https://cloud.google.com/logging/docs/setup/java. 我将Intellij中的GOOGLE_CLOUD_PROJECT和GOOGLE_APP

  • 我已经安装Kibana版本6.5。我选择了30天免费试用,并启用了x-pack安全选项。 通过KibanaUI我创建了一个用户并分配了报告所需的两个角色-kibana_user和reporting_user。现在我通过这个新用户登录,但在仪表板上找不到报告选项。 即使我使用具有超级用户角色的elastic用户登录,行为也是一样的。我错过什么了吗? 我在Kibana startup上看到一条日志,上

  • 我正在尝试为maven设置enforcer插件,以强制执行最低Java版本。但是,每当我尝试运行,我都会得到: 目标组织的参数“规则”。阿帕奇。专家插件:maven enforcer插件:1.3.1:enforce缺失或无效 以下是我的pom文件的相关部分: 我还尝试替换