How to POST form-url-encoded data with Spring Cloud Feign

Newbie picture Newbie · Mar 4, 2016 · Viewed 19.4k times · Source

Using spring-mvc annotations, how can I define an @FeignClient that can POST form-url-encoded?

Answer

kazuar picture kazuar · Jul 5, 2017

Use form encoder for feign: https://github.com/OpenFeign/feign-form and your feign configuration can look like this:

class CoreFeignConfiguration {

  @Autowired
  private ObjectFactory<HttpMessageConverters> messageConverters

  @Bean
  @Primary
  @Scope(SCOPE_PROTOTYPE)
  Encoder feignFormEncoder() {
      new FormEncoder(new SpringEncoder(this.messageConverters))
  }
}

Then, the client can be mapped like this:

@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient {

    @RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
    @Headers('Content-Type: application/x-www-form-urlencoded')
    void activate(Map<String, ?> formParams)
}