Heim > Java > javaLernprogramm > Wie übergibt SpringBoot Parameter im Header durch Feign-Aufrufe?

Wie übergibt SpringBoot Parameter im Header durch Feign-Aufrufe?

PHPz
Freigeben: 2023-05-16 20:38:07
nach vorne
2597 Leute haben es durchsucht

[SpringBoot] Übergeben von Parametern im Header durch Feign-Aufrufe

So übergeben Sie Header-Parameter über Feign

Problembeschreibung

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.

Lösung

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);
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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);
    }
Nach dem Login kopieren

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);
            }
        }
    }
}
Nach dem Login kopieren

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 {
    }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage