Heim > Java > Ändern Sie RequestBody im Spring Gateway

Ändern Sie RequestBody im Spring Gateway

WBOY
Freigeben: 2024-02-09 19:15:08
nach vorne
466 Leute haben es durchsucht

PHP-Editor Apple stellt Ihnen vor, wie Sie den RequestBody in Spring Gateway ändern. Spring Gateway ist ein API-Gateway, das auf dem Spring-Framework basiert und zur Verarbeitung und Weiterleitung von HTTP-Anfragen verwendet wird. In Spring Gateway wird RequestBody zum Empfangen der vom Client gesendeten Anforderungstextdaten verwendet. Wenn Sie den RequestBody ändern müssen, können Sie dies über einen benutzerdefinierten Filter oder Interceptor tun. Zuerst müssen Sie einen benutzerdefinierten Filter oder Interceptor erstellen und dann die Daten des Anforderungshauptteils im Filter oder Interceptor abrufen und ändern. Abschließend werden die geänderten Daten zur weiteren Verarbeitung in den Anforderungstext zurückgesetzt. Auf diese Weise kann der RequestBody in Spring Gateway geändert werden.

Frageninhalt

Ich möchte den Anfragetext ändern, bevor ich ihn an die angegebene URI weiterleite. Basierend auf der Dokumentation, die ich verwende

org.springframework.cloud.gateway.filter.factory.rewrite.modifyrequestbodygatewayfilterfactory Ändern Sie den Text. Beim Starten meines Servers startet der Server nicht mit der folgenden Fehlermeldung Ursache: Element [spring.cloud.gateway.routes[0].filters[0].modifyrequestbody.class] ist nicht gebunden. nn-Vorgang: nn Aktualisieren Sie die Anwendungskonfiguration n“, „context“: „Standardwert“}

Unten finden Sie Beispielfilter und Umschreibefunktionen

65bee659f312a

Das Folgende ist die neu geschriebene Funktion

65bee659f313a

Das Folgende ist Yaml

routes:
        - id: order-route-1
          uri: http://localhost:8999/
          predicates:
            - Path=/some/path1
            - Method=POST
          filters:
            - ModifyRequestBody:
                class: com.xyz.filters.SomeFilter
                value: application/json, application/xml
                enabled: true
Nach dem Login kopieren

Workaround

Es gibt einige Probleme mit Ihrem Code:

  1. Keine Notwendigkeit somefilter 类,只需直接从路由配置中使用 modifyrequestbody 即可。如果你确实需要它来实现 modifyrequestbody Was nicht möglich ist, Sie müssen daraus eine Bean machen, indem Sie @component hinzufügen.
  2. Ihre Yaml-Konfigurationssyntax ist falsch. Bitte beachten Sie die überarbeitete Version unten:
      routes:
        - id: order-route-1
          uri: http://localhost:8999/
          predicates:
            - path=/some/path1
            - method=post
          filters:
            - name: modifyrequestbody
              args:
                inclass: com.xyz.filters.oldtype
                outclass: com.xyz.filters.newtype
                rewritefunction: com.xyz.filters.myrewritefunction
                contenttype: application/json
Nach dem Login kopieren
  • inclass: Vollqualifizierter Klassenname, der die ursprüngliche Struktur des Anforderungstexts darstellt.

  • outclass: Stellt den vollständig qualifizierten Klassennamen der geänderten Anforderungstextstruktur dar.

  • rewritefunction: Bezieht sich auf den vollständig qualifizierten Klassennamen, der die RewriteFunction-Schnittstelle implementiert, die zum Konvertieren des Anforderungshauptteils vom Originaltyp in den neuen Typ verwendet wird.

  • contenttype (optional): Geben Sie diesen Parameter an, wenn Sie den angeforderten Inhaltstyp ändern möchten.

Angenommen, Sie möchten oldtype in newtype konvertieren, hier ist die Implementierung von oldtype 转换为 newtype,下面是 rewritefunction:

public class MyRewriteFunction implements RewriteFunction<OldType, NewType> {

    @Override
    public Publisher<NewType> apply(ServerWebExchange exchange, OldType originalRequest) {
     
        NewType modifiedRequest = modifyRequest(originalRequest);
        return Mono.just(modifiedRequest);
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonÄndern Sie RequestBody im Spring Gateway. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.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