Feign客户端:避免在查询参数中进行编码



我必须调用一个实现OData协议的服务器。我使用的是Spring和Feign客户端。我一如既往地定义了接口,这是我在里面写的调用服务器的方法:

@RequestMapping(method = RequestMethod.GET, value = "/resource")
ResponseBase<List<Resource>> getResourcer(@RequestParam Map<String, String> odata);

我必须根据上下文插入$filter$skip$top,所以在运行时我创建了一个Map,它可以包含这些关键字中的一个或多个。在我测试的场景中,我有这样的东西:

Map<String, String> odata = new HashMap<>();
odata.put("$filter=", "created_at".concat(" ge ").concat(fromTime));
ResponseBase<List<Resource>> response = repository.getResource(odata);

但这是被调用的url:

/resource?%24filter%253D=created_at%20ge%201920202921

有没有办法避免在查询参数中进行编码?或者用Spring调用实现OData的rest api的一种更简单的方法?

编辑1:

我使用

@Bean
public RequestInterceptor myCustomInterceptor() {
return new FeignDecoderUriInterceptor();
}

其中FeignDecoderUriInterceptor具有以下逻辑:

public class FeignDecoderUriInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
System.out.print(template.request().url());
template.uri(
template.request()
.url()
.replace("%20", " ")
.replace("%24", "$")
);
}
}

但即使调用正确,这也不能正常工作。

这应该有效:

odata.put("$filter", "created_at".concat(" ge ").concat(fromTime));

相关内容

  • 没有找到相关文章

最新更新