Send Java Object as Request Parameter Using Feign Client

When working with Spring Boot and Spring Cloud, Feign clients make it easy to communicate with other microservices. However, passing Java objects as query parameters can be tricky. By default, Feign treats objects as request bodies, but what if you want each field of an object to be a separate query parameter? The @SpringQueryMap annotation is your solution!

The Problem

Consider a scenario where you need to send a Java object with multiple fields as individual query parameters in a GET request. Normally, Spring Boot REST controllers handle this seamlessly, but Feign clients require a bit more configuration.

The Solution: @SpringQueryMap

With the @SpringQueryMap annotation from Spring Cloud OpenFeign, you can easily map object fields to query parameters. Following is the step by step guide to achieve this:

Step-by-Step Guide

Define Your Java Class

This is the class to send as request parameter object.

public class MyRequest {
    private String param1;
    private int param2;
    // Getters and Setters
}

Feign Client Interface

import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "myClient")
public interface MyClient {
    @RequestMapping(method = RequestMethod.GET, value = "/myEndpoint")
    String callMyEndpoint(@SpringQueryMap MyRequest myRequest);
}

Controller Class

@RestController
public class MyController {

    @GetMapping("/testFeign")
    public String callMyEndpoint(MyRequest request) {
        //implement your logic here.
    }
}

Conclusion

With @SpringQueryMap, we can effortlessly pass Java objects as query parameters in your Feign clients. This powerful annotation simplifies the process, making our code cleaner and more maintainable.