假设休息客户端,禁用特定接口方法上的解码

时间:2017-09-06 14:34:08

标签: netflix-feign

通过学习曲线,遇到了这种情况:

鉴于90%的调用都是JSON,在构建客户端时添加了GSON解码器。但是,接口中有一些方法调用应该支持原始返回而不进行解码。

@RequestLine("GET /rest/myrawmethod")
String getRawMethod();

目前,由于GSON被添加为解码器,而不是返回原始字符串,它会尝试解码它(它看起来像JSON内容,但我想绕过解码)。当不使用GSON解码器作为例外时,我似乎无法找到一种简单的方法来禁用特定的接口方法。

谢谢!

2 个答案:

答案 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();