OkHttpClientnow implementsAsyncClient
- Configurable to disable streaming mode for Default client by verils (#1182)
- Overriding query parameter name by boggard (#1184)
- Internal feign metrics by velo:
- Dropwizard metrics 5 (#1181)
- Micrometer (#1188)
- async feign variant supporting CompleteableFutures by motinis (#1174)
- deterministic iterations for Feign mocks by contextshuffling (#1165)
- Async client for apache http 5 by velo (#1179)
- Fix for vunerabilities reported by snky (#1121)
- Makes iterator compatible with Java iterator expected behavior (#1117)
- Bump reactive dependencies (#1105)
- Deprecated
encodedand add comment (#1108)
- Remove java8 module (#1086)
- Add composed Spring annotations support (#1090)
- Generate mocked clients for tests from feign interfaces (#1092)
- Add Apache Http 5 Client (#1065)
- Updating Apache HttpClient to 4.5.10 (#1080) (#1081)
- Spring4 contract (#1069)
- Declarative contracts (#1060)
- Adding support for JDK Proxy (#1045)
- Add Google HTTP Client support (#1057)
- Upgrade dependencies with security vunerabilities (#997 #1010 #1011 #1024 #1025 #1031 #1032)
- Parse Retry-After header responses that include decimal points (#980)
- Fine-grained HTTP error exceptions with client and server errors (#854)
- Adds support for per request timeout options (#970)
- Unwrap RetryableException and throw cause (#737)
- JacksonEncoder avoids intermediate String request body (#989)
- Respect decode404 flag and decode 404 response body (#1012)
- Maintain user-given order for header values (#1009)
- Refactoring RequestTemplate to RFC6570 (#778)
- Allow JAXB context caching in factory (#761)
- Reactive Wrapper Support (#795)
- Introduced native http2 client using Java 11 (#806)
- Unwrap RetryableException and throw cause (#737)
- Supports PATCH without a body paramter (#824)
- Feign-Ribbon integration now depends on Ribbon 2.3.0, updated from Ribbon 2.1.1 (#826)
- Feign baseline is now JDK 8
- Feign is now being built and tested with OpenJDK 11 as well. Releases and code base will use JDK 8, we are just testing compatibility with JDK 11.
- Removed @Deprecated methods marked for removal on feign 10.
RetryExceptionincludes theMethodused for the offendingRequest.Responseobjects now contain theRequestused.
- Feign builder now supports flag
doNotCloseAfterDecodeto support lazy iteration of responses. - Adds
JacksonIteratorDecoderandStreamDecoderto decode responses asjava.util.Iteratororjava.util.stream.Stream.
- When specified, Content-Type header is now included on OkHttp requests lacking a body.
- Sets empty HttpEntity if apache request body is null.
- Introduces
feign-java8with support forjava.util.Optional - Adds
Feign.Builder.mapAndDecode()to allow response preprocessing before decoding it.
- 404 responses are no longer swallowed for
voidreturn types.
- Adds Builder class to JAXBDecoder for disabling namespace-awareness (defaults to true).
- Adds
FallbackFactory, allowing access to the cause of a Hystrix fallback - Adds support for encoded parameters via
@Param(encoded = true)
- Adds Hystrix
SetterFactoryto customize group and command keys - Supports context path when using Ribbon
LoadBalancingTarget - Adds builder methods for the Response object
- Deprecates Response factory methods
- Adds nullable Request field to the Response object
- Allows query parameters to match on a substring. Ex
q=body:{body}
- Migrates to maven from gradle
- Changes maven groupId to
io.github.openfeign
- Adds support for expansion of @Param lists
- Content-Length response bodies with lengths greater than Integer.MAX_VALUE report null length
- Previously the OkhttpClient would throw an exception, and ApacheHttpClient would report a wrong, possibly negative value
- Adds support for encoded query parameters in
@QueryMapvia@QueryMap(encoded = true) - Keys in
Response.headersare now lower-cased. This map is now case-insensitive with regards to keys, and iterates in lexicographic order.- This is a step towards supporting http2, as header names in http1 are treated as case-insensitive and http2 down-cases header names.
- Adds support to RxJava Completable via
HystrixFeignbuilder with fallback support - Upgraded hystrix-core to 1.4.26
- Upgrades dependency version for OkHttp/MockWebServer 3.2.0
- Adds
@HeaderMapannotation to support dynamic header fields and values - Add support for default and static methods on interfaces
- Adds
@QueryMapannotation to support dynamic query parameters - Supports runtime injection of
Param.ExpanderviaMethodMetadata.indexToExpander - Adds fallback support for HystrixCommand, Observable, and Single results
- Supports PUT without a body parameter
- Supports substitutions in
@Headerslike in@Body. (#326)- Note: You might need to URL-encode literal values of
{or%in your existing code.
- Note: You might need to URL-encode literal values of
- Add support for RxJava Observable and Single return types via the
HystrixFeignbuilder. - Adds fallback implementation configuration to the
HystrixFeignbuilder - Bumps dependency versions, most notably Gson 2.5 and OkHttp 2.7
- Never expands >8kb responses into memory
- Adds
Feign.Builder.decode404()to reduce boilerplate for empty semantics.
- Adds support for Hystrix via a
HystrixFeignbuilder.
- Adds HTTP status to FeignException for easier response handling
- Reads class-level @Produces/@Consumes JAX-RS annotations
- Supports POST without a body parameter
- Skips error handling when return type is
Response
- Adds jackson-jaxb codec
- Bumps dependency versions for integrations
- OkHttp/MockWebServer 2.5.0
- Jackson 2.6.1
- Apache Http Client 4.5
- JMH 1.10.5
- Bumps dependency versions for integrations
- OkHttp/MockWebServer 2.4.0
- Gson 2.3.1
- Jackson 2.6.0
- Ribbon 2.1.0
- SLF4J 1.7.12
- Adds base api support via single-inheritance interfaces
- Added possibility to leave slash encoded in path parameters
- Correct Retryer bug that prevented it from retrying requests after the first 5 retry attempts.
- Note: If you have a custom
feign.Retryerimplementation you now must now implementpublic Retryer clone(). It is suggested that you simply return a new instance of your Retryer class.
- Note: If you have a custom
- Adds client implementation for Apache Http Client
- Allows customized request construction by exposing
Request.create() - Adds JMH benchmark module
- Enforces source compatibility with animal-sniffer
- Allows
@Headersto be applied to a type
- Removes Dagger 1.x Dependency
- Removes support for parameters annotated with
javax.inject.@Named. Usefeign.@Paraminstead. - Makes body parameter type explicit.
- Allows
@Headersto be applied to a type
- Adds Request.Options support to RibbonClient
- Adds LBClientFactory to enable caching of Ribbon LBClients
- Updates to Ribbon 2.0-RC13
- Updates to Jackson 2.5.1
- Supports query parameters without values
- Adds
Feign.Builder.build() - Opens constructor for Gson and Jackson codecs which accepts type adapters
- Adds EmptyTarget for interfaces who exclusively declare URI methods
- Reformats code according to Google Java Style
- Introduces feign.@Param to annotate template parameters. Users must migrate from
javax.inject.@Namedtofeign.@Parambefore updating to Feign 8.0.- Supports custom expansion via
@Param(value = "name", expander = CustomExpander.class)
- Supports custom expansion via
- Adds OkHttp integration
- Allows multiple headers with the same name.
- Ensures Accept headers default to
*/*
- Expose reflective dispatch hook: InvocationHandlerFactory
- Add JAXB integration
- Add SLF4J integration
- Upgrade to Dagger 1.2.2.
- Note: Dagger-generated code prior to version 1.2.0 is incompatible with Dagger 1.2.0 and beyond. Dagger users should upgrade Dagger to at least version 1.2.0, and recompile any dependency-injected classes.
- Updates to Ribbon 2.0-RC5
- Fix for #85
- Add SLF4J integration
- Fix for BasicAuthRequestInterceptor when username and/or password are long.
- Support binary request and response bodies.
- Don't throw http status code exceptions when return type is
Response.
- Add
BasicAuthRequestInterceptor - Add Jackson integration
- Split
GsonCodecintoGsonEncoderandGsonDecoder, which are easy to use withFeign.Builder - Deprecate
GsonCodec - Update to Ribbon 0.2.3
- Support usage of
GsonCodecviaFeign.Builder
- Correctly handle IOExceptions wrapped by Ribbon.
- Miscellaneous findbugs fixes.
Decoder.decode()is no longer called forResponseorvoidtypes.
- Remove support for Observable methods.
- Use single non-generic Decoder/Encoder instead of sets of type-specific Decoders/Encoders.
- Decoders/Encoders are now more flexible, having access to the Response/RequestTemplate respectively.
- Moved SaxDecoder into
feign-saxdependency.- SaxDecoder now decodes multiple types.
- Remove pattern decoders in favor of SaxDecoder.
- Added Feign.Builder to simplify client customizations without using Dagger.
- Gson type adapters can be registered as Dagger set bindings.
Feign.create(...)now requires specifying an encoder and decoder.
- Fix NullPointerException on calling equals and hashCode.
- Support overriding default HostnameVerifier.
- Support GZIP content encoding for request bodies.
- Support Iterable args for query parameters.
- Support urls which have query parameters.
- Add ability to configure zero or more RequestInterceptors.
- Remove
overrides = trueon codec modules.
- Document and enforce JAX-RS annotation processing from server POV
- Skip query template parameters when corresponding java arg is null
- update to dagger 1.1
- Add wikipedia search example
- Allow
@Pathon types in feign-jaxrs
- Support RxJava-style Observers.
- Return type can be
Observable<T>for an async equiv ofIterable<T>. Observer<T>replacesIncrementalCallback<T>and is passed toObservable.subscribe().- On
Subscription.unsubscribe(),Observer.onNext()will stop being called.
- Return type can be
- Log when an http request is retried or a response fails due to an IOException.
- Added support for asynchronous callbacks via
IncrementalCallback<T>andIncrementalDecoder.TextStream<T>. - Wire is now Logger, with configurable Logger.Level.
- Added
feign-gsoncodec, used vianew GsonModule() - changed codec to be similar to WebSocket JSR 356
- Decoder is now
Decoder.TextStream<T> - BodyEncoder is now
Encoder.Text<T> - FormEncoder is now
Encoder.Text<Map<String, ?>>
- Decoder is now
- Encoder and Decoders are specified via
Provides.Type.SETbinding. - Default Encoder and Form Encoder is
Encoder.Text<Object> - Default Decoder is
Decoder.TextStream<Object> - ErrorDecoder now returns Exception, not fallback.
- There can only be one
ErrorDecoderandRequest.Optionsbinding now.
- removes guava and jax-rs dependencies
- adds JAX-RS integration
- adds Ribbon integration
- adds cli example
- exponential backoff customizable via Retryer.Default ctor
- Initial open source release