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.
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!