Wenn wir Feign verwenden, um die API-Schnittstelle eines anderen Dienstes in SpringCloud anzufordern, müssen die Parameter übergeben werden im Header Wenn keine spezielle Verarbeitung erfolgt, gehen die Parameter im Header verloren.
Option 1: Übergeben Sie @RequestHeader(name = "headerName")
Zum Beispiel: Feign ist wie folgt definiert
@FeignClient(name = "service-name") public interface XXXFeignClient { @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET) String getUserTicket(@RequestParam("id") String id); }
Angenommen, die Schnittstelle /user/getUserTicket im Dienst service-name muss den Referrer abrufen Aus den Header-Daten können wir dann den obigen Code umwandeln:
@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); }
Dann übergeben Sie beim Aufruf einfach den Referrer-Parameter, z. B.
public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) { String referer = request.getHeader("Referer"); return xxxFeignClient.getUserTicket(id, referer); }
Lösung 2: Durch Implementierung der RequestInterceptor-Schnittstelle
Passen Sie zunächst die Apply-Methode an, die das implementiert RequestInterceptor-Schnittstelle wie folgt
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); } } } }
Dann konfigurieren Sie die benutzerdefinierte Konfigurationsklasse in Feign, um die Übertragung von Schnittstellen-Header-Parametern in Feign zu realisieren
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class) public interface XXXFeignClient { }
Das obige ist der detaillierte Inhalt vonWie übergibt SpringBoot Parameter im Header durch Feign-Aufrufe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!