通过学习曲线,遇到了这种情况:
鉴于90%的调用都是JSON,在构建客户端时添加了GSON解码器。但是,接口中有一些方法调用应该支持原始返回而不进行解码。
@RequestLine("GET /rest/myrawmethod")
String getRawMethod();
目前,由于GSON被添加为解码器,而不是返回原始字符串,它会尝试解码它(它看起来像JSON内容,但我想绕过解码)。当不使用GSON解码器作为例外时,我似乎无法找到一种简单的方法来禁用特定的接口方法。
谢谢!
答案 0 :(得分:0)
看到一些对各种方法的引用,这似乎是目前最好的途径:
@RequestLine("GET /rest/myrawmethod")
feign.Response getRawMethod();
然后当你去解析响应时,使用类似的东西:
feign.codec.Decoder dc = new Decoder.Default();
String strresponse = dc.decode(myfeignresponse, String.class); //wrapped with exception handling
在你没有围绕REST有效负载,只有方法调用...或想要做一些更奇特的事情(比如使用feign.Response流方法)的场景中进行原型设计的好方法。
答案 1 :(得分:0)
尝试像这样自定义Decoder
:
class StringHandlingDecoder implements Decoder {
private final Decoder defaultDecoder;
StringHandlingDecoder(Decoder defaultDecoder) {
this.defaultDecoder = defaultDecoder;
}
@Override
public Object decode(Response response, Type type) throws IOException, FeignException {
if (type == String.class) {
return new StringDecoder().decode(response, type);
} else {
return this.defaultDecoder.decode(response, type);
}
}
}
然后像这样建立您的客户:
Feign.builder()
.decoder(new StringHandlingDecoder(new GsonDecoder()))
.build();