EL1041E: After parsing a valid expression, there is still more data in the expression

在使用Spring Cloud Gateway的时候,路由信息是根据DiscoveryClient自动生成的,现在要给自动生成的路由信息统一添加Predicate和Filter。配置如下所示:
application.yml

spring: 
  cloud: 
    gateway: 
      discovery:
        locator:
          enabled: true
          predicates:
          - name: Path
            args:
              pattern: "'/'+serviceId+'/test'"
          filters: 
          - name: RedirectTo
            args:
              status: 301
              url: http://www.xinyues.com

这个时候,网关服务启动是没有问题的,但是在浏览器中输入获取所有路由信息时,报下面的异常:

2019-10-26 16:40:40 ERROR org.springframework.core.log.CompositeLog.error(CompositeLog.java:117) - [d04837fc] 500 Server Error for HTTP GET "/actuator/gateway/routes" org.springframework.expression.sp
el.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'colon(:)'
	at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:135) ~[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE]
	at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:61) ~[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE]
	at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:33) ~[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE]
	at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:52) ~[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE]
	at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:43) ~[spring-expression-5.1.5.RELEASE.jar:5.1.5.RELEASE]
	at org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator.getValueFromExpr(DiscoveryClientRouteDefinitionLocator.java:129) ~[spring-cloud-gateway-core-2.1.0.RELEASE.jar:2.1
.0.RELEASE]
	at org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator.lambda$getRouteDefinitions$4(DiscoveryClientRouteDefinitionLocator.java:117) ~[spring-cloud-gateway-core-2.1.0.REL
EASE.jar:2.1.0.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.tryOnNext(FluxFilterFuseable.java:143) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:303) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.tryOnNext(FluxFilterFuseable.java:361) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:303) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.slowPath(FluxIterable.java:515) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.request(FluxIterable.java:473) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:404) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:162) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:933) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onSubscribe(FluxFilterFuseable.java:299) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:135) [reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]


欧莱雅男士锐能抗初老护肤套装(元气露+多效霜+眼霜+洁面膏50ml2+面膜10) 视黄醇紧致 洗面奶男

根据异常信息,可以定位到是url: http://www.xinyues.com配置错误。因为这里配置的信息是需要Spel解析的,如果像上面那样直接配置,会按照Spel语法解析,我们需要的是一个纯字符串值,应该这样配置:url: "'http://www.xinyues.com'"

posted @ 2019-10-26 16:50  王广帅  阅读(16914)  评论(0编辑  收藏  举报