Home > Java > javaTutorial > body text

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

PHPz
Release: 2023-05-16 20:38:07
forward
2561 people have browsed it

[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);
}
Copy after login

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);
}
Copy after login

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);
    }
Copy after login

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);
            }
        }
    }
}
Copy after login

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 {
    }
Copy after login

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!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template