Home  >  Article  >  Java  >  How does SpringBoot pass parameters in the Header through Feign calls?

How does SpringBoot pass parameters in the Header through Feign calls?

PHPz
PHPzforward
2023-05-16 20:38:072562browse

[SpringBoot] Pass Header parameters through Feign calls

How to pass Header parameters through Feign

Problem description

We use Feign to request another service in SpringCloud When using the Api interface, there is a need to pass the parameters in the header. If no special processing is done, the parameters in the header will be lost.

Solution

Option 1: Pass @RequestHeader(name = "headerName")

For example: Feign is defined as follows

@FeignClient(name = "service-name")
public interface XXXFeignClient {
    @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
    String getUserTicket(@RequestParam("id") String id);
}

Assume that in the service The /user/getUserTicket interface in service-name needs to get the Referer data from the Header, then we can modify the above code:

@FeignClient(name = "service-name")
public interface XXXFeignClient {
    @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
    String getUserTicket(@RequestParam("id") String id, @RequestHeader(name = "Referer") String referer);
}

Then pass the referer parameter in when calling, such as

public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) {
        String referer = request.getHeader("Referer");
        return xxxFeignClient.getUserTicket(id, referer);
    }

Option 2: By implementing the RequestInterceptor interface

First, customize the apply method that implements the RequestInterceptor interface, as follows

import org.springframework.stereotype.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Configuration
public class FeignConfiguration implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        Enumeration<String> headerNames = request.getHeaderNames();
        if (headerNames != null) {
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                String values = request.getHeader(name);
                requestTemplate.header(name, values);
            }
        }
    }
}

Then configure the custom configuration class into Feign, and that’s it The transfer of interface Header parameters in Feign can be realized

@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class)
    public interface XXXFeignClient {
    }

The above is the detailed content of How does SpringBoot pass parameters in the Header through Feign calls?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete