news 2026/9/3 1:12:52

spring-cloud-gateway报错Failed to bind properties under ‘‘ to org.springframework.cloud.gateway

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spring-cloud-gateway报错Failed to bind properties under ‘‘ to org.springframework.cloud.gateway
目录
      • 报错信息
      • 解决办法
        • 原因
        • 错误示范
        • 正确示范
        • 解决办法
报错信息

如果是动态刷新路由报如下错误的话:

reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under '' to org.springframework.cloud.gateway.handler.predicate.QueryRoutePredicateFactory$Config Caused by: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under '' to org.springframework.cloud.gateway.handler.predicate.QueryRoutePredicateFactory$Config at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:363) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:323) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:308) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:300) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:285) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.cloud.gateway.support.ConfigurationService.bindOrCreate(ConfigurationService.java:139) ~[spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.support.ConfigurationService$ConfigurableBuilder.doBind(ConfigurationService.java:188) ~[spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.support.ConfigurationService$AbstractBuilder.bind(ConfigurationService.java:286) ~[spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.lookup(RouteDefinitionRouteLocator.java:281) ~[spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.combinePredicates(RouteDefinitionRouteLocator.java:248) ~[spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.convertToRoute(RouteDefinitionRouteLocator.java:169) ~[spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:100) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:413) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialMain.drain(FluxMergeSequential.java:425) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialMain.innerComplete(FluxMergeSequential.java:321) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialInner.onSubscribe(FluxMergeSequential.java:544) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:161) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Flux.subscribe(Flux.java:8357) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialMain.onNext(FluxMergeSequential.java:230) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:267) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:225) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialMain.onSubscribe(FluxMergeSequential.java:191) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:161) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Flux.subscribe(Flux.java:8357) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialMain.onNext(FluxMergeSequential.java:230) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:267) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:225) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxMergeSequential$MergeSequentialMain.onSubscribe(FluxMergeSequential.java:191) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:161) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Mono.subscribe(Mono.java:4252) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Mono.subscribeWith(Mono.java:4363) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Mono.subscribe(Mono.java:4223) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Mono.subscribe(Mono.java:4159) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at reactor.core.publisher.Mono.subscribe(Mono.java:4106) ~[reactor-core-3.3.12.RELEASE.jar:3.3.12.RELEASE] at org.springframework.cloud.gateway.route.CachingRouteLocator.onApplicationEvent(CachingRouteLocator.java:82) [spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.route.CachingRouteLocator.onApplicationEvent(CachingRouteLocator.java:40) [spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.cloud.gateway.route.RouteRefreshListener.reset(RouteRefreshListener.java:75) [spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.route.RouteRefreshListener.resetIfNeeded(RouteRefreshListener.java:70) [spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.cloud.gateway.route.RouteRefreshListener.onApplicationEvent(RouteRefreshListener.java:64) [spring-cloud-gateway-server-2.2.6.RELEASE.jar:2.2.6.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) [spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE] at com.alibaba.cloud.nacos.discovery.NacosWatch$1.onEvent(NacosWatch.java:100) [spring-cloud-starter-alibaba-nacos-discovery-2.2.2.RELEASE.jar:2.2.2.RELEASE] at com.alibaba.nacos.client.naming.core.EventDispatcher$Notifier.run(EventDispatcher.java:177) [nacos-client-1.3.2.jar:na] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191] Caused by: org.springframework.boot.context.properties.bind.validation.BindValidationException: Binding validation errors on - Field error in object '' on field 'param': rejected value [null]; codes [NotEmpty.param,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [.param,param]; arguments []; default message [param]]; default message [不能为空] at org.springframework.boot.context.properties.bind.validation.ValidationBindHandler.validateAndPush(ValidationBindHandler.java:139) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.validation.ValidationBindHandler.validate(ValidationBindHandler.java:112) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.validation.ValidationBindHandler.onFinish(ValidationBindHandler.java:103) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.Binder.handleBindResult(Binder.java:339) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:320) ~[spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE] ... 56 common frames omitted
解决办法
原因

这里是因为PredicateDefinition在添对应的Predicate的时候,根据PredicateDefinition的name取出对应的XXXXRoutePredicateFactory。比如name是Query,那么对应的就是QueryRoutePredicateFactory,如果name是Header,那么对应的就是HeaderRoutePredicateFactory。取到对应的XXXXRoutePredicateFactory后,会用他们的内部类Config去解析PredicateDefinition.addArg的参数。这里的addArg会有一个key,这里的key必须和XXXXRoutePredicateFactory的对应。

错误示范
predicateDefinition.setName("Query"); predicateDefinition.addArg("query", "clientId, " + uploadClientId);

这里就会报上面的错误,因为在QueryRoutePredicateFactory配置了key的值

/** * Param key. */ public static final String PARAM_KEY = "param"; /** * Regexp key. */ public static final String REGEXP_KEY = "regexp";
正确示范
predicateDefinition.setName("Query"); predicateDefinition.addArg("param", "clientId"); predicateDefinition.addArg("regexp", "1");
解决办法

去对应的XXXXRoutePredicateFactory找到他们的key值。比如HeaderRoutePredicateFactory叫header;AfterRoutePredicateFactory的是datetime。其他可以自己查找。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 0:09:56

PDF-Extract-Kit实战案例:智能文档检索系统

PDF-Extract-Kit实战案例:智能文档检索系统 1. 引言 在科研、教育和企业办公场景中,PDF 文档作为知识传递的核心载体,往往包含大量结构化信息——如文字、表格、数学公式和图像。然而,传统方式难以高效提取这些内容并进行二次利…

作者头像 李华
网站建设 2026/9/3 0:08:39

从下载到运行:Proteus Windows安装完整示例

从零开始搭建电路仿真环境:Proteus Windows 安装与首个项目实战指南 你是不是也曾在学习单片机或做课程设计时,被“画错一根线就得重焊一遍”的现实折磨得够呛?有没有想过,在电脑上就能把整个电路连好、程序烧进去、还能用虚拟示…

作者头像 李华
网站建设 2026/9/3 0:09:37

基于TouchGFX的智能温控面板开发实战案例

从零打造专业级智能温控面板:TouchGFX STM32 实战全解析你有没有过这样的体验?家里的空调面板反应迟钝,调个温度要等半秒才动;或者工业设备上的操作屏,界面像十几年前的老家电,按钮生硬、动画卡顿。这些“…

作者头像 李华
网站建设 2026/9/3 0:08:50

混元翻译1.5模型对比:1.8B vs 7B选型指南

混元翻译1.5模型对比:1.8B vs 7B选型指南 随着多语言交流需求的持续增长,高质量、低延迟的机器翻译模型成为智能应用落地的关键基础设施。腾讯开源的混元翻译大模型(HY-MT1.5)系列在近期发布了两个核心版本:HY-MT1.5-…

作者头像 李华
网站建设 2026/9/2 17:55:32

PDF智能提取工具箱实战:医学报告关键指标提取

PDF智能提取工具箱实战:医学报告关键指标提取 1. 引言:医学报告结构化提取的挑战与解决方案 在医疗信息化进程中,大量临床数据以非结构化的PDF格式存储,尤其是体检报告、检验单、影像诊断书等关键文档。这些文档中蕴含着血压、血…

作者头像 李华
网站建设 2026/9/3 0:08:56

image2lcd在OLED显示驱动中的实战案例详解

从一张图片到OLED屏幕:用image2lcd打通嵌入式图形显示的“最后一公里”你有没有过这样的经历?UI设计师发来一个精致的Logo PNG图,说:“这个要显示在设备开机画面上。”你打开工程,心想:好家伙,怎…

作者头像 李华