Tags: tanming1003/feign
Tags
SynchronousMethodHandler does not wrap exceptions thrown by Decoder#d… …ecode in decode404 mode Removing exception wrapping adds flexibility to the interplay of Decoder and ErrorDecoder: A Decoder can now delegate to an ErrorDecoder and the original ErrorDecoder exception gets thrown rather than a Feign-specific DecodeException. An example use-case is a Jackson/Gson implementation of special 404-handling of Optional<Foo> methods: when the Feign client has decode404() enabled, then the Decoder is in charge of dispatching 404 to Optional#absent where applicable, or to a delegate ErrorDecoder otherwise; consistent exception handling requires that the exception produced by the ErrorDecoder does not wrapped.
Adds Feign.Builder.decode404() to reduce boilerplate for empty semantics This adds the `Feign.Builder.decode404()` flag which indicates decoders should process responses with 404 status. It also changes all first-party decoders (like gson) to return well-known empty values by default. Further customization is possible by wrapping or creating a custom decoder. Prior to this change, we used custom invocation handlers as the way to add fallback values based on exception or return status. `feign-hystrix` uses this to return `HystrixCommand<X>`, but the general pattern applies to anything that has a type representing both success and failure, such as `Try<X>` or `Observable<X>`. As we define it here, 404 status is not a retry or fallback policy, it is just empty semantics. By limiting Feign's special processing to 404, we gain a lot with very little supporting code. If instead we opened all codes, Feign could easily turn bad request, redirect, or server errors silently to null. This sort of configuration issue is hard to troubleshoot. 404 -> empty is a very safe policy vs all codes. Moreover, we don't create a cliff, where folks seeking fallback policy eventually realize they can't if only given a response code. Fallback systems like Hystrix address exceptions that occur before or in lieu of a response. By special-casing 404, we avoid a slippery slope of half- implementing Hystrix. Finally, 404 handling has been commonly requested: it has a clear use- case, and through that value. This design supports that without breaking compatibility, or impacting existing integrations such as Hystrix or Ribbon. See OpenFeign#238 OpenFeign#287
Supports POST without a body parameter
```java
@RequestLine("POST")
String noPostBody();
```
see
http://johnfeng.github.io/blog/2015/06/30/okhttp-updates-post-wouldnt-be-allowed-to-have-null-body/
Switches body parameter substitution to use encoded parameters Resolves issue where some characters (+ %..) would end up double decoded if existing in parameters. Fixes OpenFeign#264
Merge pull request OpenFeign#267 from Netflix/dont-break-on-processAn… …notationOnClass Un-abstracts processAnnotationOnClass so that we don't break api
Fixes NPE when apache client rebuffers content When log level is full, the response body is rebuffered. The Apache client had a bug where it allowed `toInputStream` to return null. This fixes that bug and backfills tests for the other two clients. Fixes OpenFeign#255
PreviousNext