Advanced usage of the Feign client
Feign supports inheritance and multiple inheritance; it helps to remove boilerplate code for a service to follow the same conventions. You can create a base API interface and inherit it for a specific API interface.
Let's see the example:
interface BaseAPI<T> { @GetMapping("/health") T get(); @GetMapping("/all") List<T> all(); }
Let's define a specific API interface by inheriting the base interface methods:
interface CustomAPI extends BaseAPI<T> { @GetMapping("/custom") T custom(); }
Sometimes the resource representations are also consistent. So, you can declare to accept type parameters on the base API interface and you can inherit this base API interface to the specific interfaces. Let's see the example:
@Headers("Accept: application/json") interface BaseApi<T> { @GetMapping("/api/{key}") T get(@PathVariable("key") String key); @GetMapping("/api") List<T> list(); @Headers("Content-Type...