1. Overview

In this tutorial, we’ll learn how to make POST API requests with form-url-encoded data in the request body using Feign Client.

2. Ways to POST form-url-encoded Data

There are two different ways we can make POST form-url-encoded data. We need first to create a custom encoder and configure it for our Feign client:

class FormFeignEncoderConfig {
    public Encoder encoder(ObjectFactory<HttpMessageConverters> converters) {
        return new SpringFormEncoder(new SpringEncoder(converters));

We’ll use this custom class in our Feign client configuration:

@FeignClient(name = "form-client", url = "http://localhost:8085/api",
  configuration = FormFeignEncoderConfig.class)
public interface FormClient {
    // request methods

We’re now finished with the Feign and bean configurations. Let’s look into the request methods now.

2.1. Using POJO

We’ll create a Java POJO class with all the form parameters as members:

public class FormData {
    int id;
    String name;
    // constructors, getters and setters

We’ll pass this object as a request body in the POST request.

@PostMapping(value = "/form", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
void postFormData(@RequestBody FormData data);

Let’s verify our code; the request body should have the id and name as form-url-encoded data:

public void givenFormData_whenPostFormDataCalled_thenReturnSuccess() {
    FormData formData = new FormData(1, "baeldung");

      .withHeader("Content-Type", equalTo("application/x-www-form-urlencoded; charset=UTF-8"))

2.2. Using Map

We can also use Map instead of POJO class to send the form-url-encoded data in the POST request body.

@PostMapping(value = "/form/map", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
void postFormMapData(Map<String, ?> data);

Note that the value of the Map should be ‘?’.

Let’s verify our code:

public void givenFormMap_whenPostFormMapDataCalled_thenReturnSuccess() {
    Map<String, String> mapData = new HashMap<>();
    mapData.put("name", "baeldung");
    mapData.put("id", "1");

      .withHeader("Content-Type", equalTo("application/x-www-form-urlencoded; charset=UTF-8"))

3. Conclusion

In this article, we’ve seen how to make POST API requests with form-url-encoded data in the request body.

As always, the complete source code of the examples is available over on GitHub.