Nepxion / Discovery

☀️ Nepxion Discovery is a solution for Spring Cloud with blue green, gray, route, limitation, circuit breaker, degrade, isolation, tracing, dye, failover, active 蓝绿灰度发布、路由、限流、熔断、降级、隔离、追踪、流量染色、故障转移、多活
http://www.nepxion.com
Apache License 2.0
5.61k stars 1.42k forks source link

FeignStrategyInterceptor IllegalArgumentException #207

Open generalrbb opened 2 weeks ago

generalrbb commented 2 weeks ago

java.lang.IllegalArgumentException message: an expression is required. stack: java.lang.IllegalArgumentException: an expression is required. at feign.template.Expressions.create(Expressions.java:50) at feign.template.Template.parseFragment(Template.java:224) at feign.template.Template.parseTemplate(Template.java:203) at feign.template.Template.(Template.java:70) at feign.template.HeaderTemplate.(HeaderTemplate.java:81) at feign.template.HeaderTemplate.create(HeaderTemplate.java:57) at feign.RequestTemplate.lambda$appendHeader$2(RequestTemplate.java:693) at java.util.Map.compute(Map.java:1093) at feign.RequestTemplate.appendHeader(RequestTemplate.java:691) at feign.RequestTemplate.header(RequestTemplate.java:675) at feign.RequestTemplate.header(RequestTemplate.java:657) at com.nepxion.discovery.plugin.strategy.service.aop.FeignStrategyInterceptor.applyInnerHeader(FeignStrategyInterceptor.java:64) at com.nepxion.discovery.plugin.strategy.service.aop.FeignStrategyInterceptor.apply(FeignStrategyInterceptor.java:49) at feign.SynchronousMethodHandler.targetRequest(SynchronousMethodHandler.java:171) at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:101) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80) at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)

HaojunRen commented 2 weeks ago

What's the version of Nepxion Discovery? Maybe your heads have special character?

HaojunRen commented 2 weeks ago

Refer to feign.template.Expressions

  public static Expression create(final String value) {

    /* remove the start and end braces */
    final String expression = stripBraces(value);
    if (expression == null || expression.isEmpty()) {
      throw new IllegalArgumentException("an expression is required.");
    }

    ...
  private static String stripBraces(String expression) {
    if (expression == null) {
      return null;
    }
    if (expression.startsWith("{") && expression.endsWith("}")) {
      return expression.substring(1, expression.length() - 1);
    }
    return expression;
  }

I guess your value is '{}'?