禁用PathVariable的伪装编码

问题描述 投票:1回答:1

我们有以下假装客户

public interface MyServiceClient {

    @RequestMapping(method = RequestMethod.GET, value = "/item/{itemKey}")
    Item getItem (@PathVariable("itemKey") String itemKey);

这些项目可以包含正在编码的特殊字符,例如:::,并且请求URL变成类似于https://myservice.com/item/a%3Ab%3A%3Ac而不是https://myservice.com/item/a:b::c的字符

有人可以帮助我了解如何解决此问题吗?

java spring spring-cloud-feign
1个回答
0
投票

OpenFeign跟踪此https://github.com/OpenFeign/feign/issues/1190时遇到问题。猜猜一旦完成,它将由spring-cloud-feign实现。

与此同时,我针对此问题的解决方法是创建一个RequestInterceptor并将%3A替换为:

public class MyRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        template.uri(template.path().replaceAll("%3A", ":"));
    }
}

并使用此requestInterceptor在feignConfig中构建您的feignClient

    @Bean
    public Feign.Builder tcsClientBuilder() {
        return Feign.builder().requestInterceptor(new MyRequestInterceptor());
    }
© www.soinside.com 2019 - 2024. All rights reserved.