Search code examples
javaspring-bootnetflix-feign

@FeignClient forces @GetMapping with @RequestBody to POST


I have following REST controller with GET method that have BODY, that works fine with tests and postman

@RestController
@RequestMapping(value = "/xxx")
public class Controller {
    @GetMapping({"/find"})
    public LocalDateTime findMax(@RequestBody List<ObjectId> ids) {
        //return sth   
    }
}

but when FeignClient is used to call service, instead GET request a POST request is generated (@GetMapping annotation is ignored)

@FeignClient
public interface CoveragesServiceResource extends CoveragesService {
    @GetMapping({"/find"})
    LocalDateTime findMax(@RequestBody List<ObjectId> ids);
}

that gives an error:

Request method 'POST' not supported

Solution

  • Solution:

    Include the feign-hc5 dependency

    In your application.yml enable the use of of this client:

    spring:
     cloud:
      openfeign:
       httpclient:
        hc5:
         enabled: true
    

    Note:

    For HttpURLConnection (the default client) or OkHttp clients, GET requests with a body will not work. HttpURLConnection will convert such requests to POST, leading to a 405 Method Not Allowed error, while OkHttp does not support sending a body with GET requests.