news 2026/5/23 14:47:33

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/5/12 3:49:04

科哥PDF工具箱教程:自动化脚本批量处理PDF

科哥PDF工具箱教程:自动化脚本批量处理PDF 1. 引言 1.1 PDF-Extract-Kit:智能提取的工程化实践 在科研、教育和文档数字化场景中,PDF 文件常包含复杂的结构元素——公式、表格、图文混排等。传统手动提取方式效率低、易出错,难…

作者头像 李华
网站建设 2026/5/10 23:44:48

Spring 的三种注入方式?

1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入,总结起来,无非三种:属性注入set 方法注入构造方法注入我们分别来看下。 1.1 属性注入 属性注入是大家最为常见也是使用最多的一种注入方式了,代码如下: Servi…

作者头像 李华
网站建设 2026/5/1 9:27:48

基于深度学习 YOLOv8➕pyqt5的西红柿成熟度检测系统

基于深度学习 YOLOv8➕pyqt5的西红柿成熟度检测系统, 完整源码源文件已标注的数据集训练好的模型环境配置教程程序运行说明文档 可以替换自己训练的模型,实现检测目标自定义 blog.csdnimg.cn/direct/31c61653310648458126c961a01fd682.png) 以下文章及示…

作者头像 李华
网站建设 2026/5/12 17:25:07

HY-MT1.5部署实战:5分钟搭建企业级翻译系统

HY-MT1.5部署实战:5分钟搭建企业级翻译系统 在AI驱动的全球化浪潮中,高质量、低延迟的机器翻译能力已成为企业出海、跨语言协作的核心基础设施。腾讯近期开源的混元翻译大模型HY-MT1.5系列,凭借其卓越的翻译质量与灵活的部署能力&#xff0c…

作者头像 李华
网站建设 2026/5/22 19:58:44

PDF-Extract-Kit性能对比测试:不同硬件配置下的表现

PDF-Extract-Kit性能对比测试:不同硬件配置下的表现 1. 引言 1.1 技术背景与选型需求 在当前AI驱动的文档智能处理领域,PDF内容提取已成为科研、教育、出版等多个行业的重要基础能力。传统OCR工具虽能完成基本文字识别,但在面对复杂版式、…

作者头像 李华
网站建设 2026/5/10 8:42:56

CCS安装教程:兼容多种传感器接入的指南

从零搭建多传感器系统:CCS开发环境实战全指南 你有没有遇到过这样的场景?手头一堆不同接口的传感器——IC的温湿度芯片、SPI的惯性测量单元、ADC接的热敏电阻,还有串口输出的GPS模块。想把它们统一接入一个MCU项目,结果在IDE配置…

作者头像 李华