Maison > Java > Modifier RequestBody dans la passerelle Spring

Modifier RequestBody dans la passerelle Spring

WBOY
Libérer: 2024-02-09 19:15:08
avant
467 Les gens l'ont consulté

L'éditeur PHP Apple vous présente comment modifier le RequestBody dans Spring Gateway. Spring Gateway est une passerelle API basée sur le framework Spring, utilisée pour traiter et transmettre les requêtes HTTP. Dans Spring Gateway, RequestBody est utilisé pour recevoir les données du corps de la demande envoyées par le client. Si vous devez modifier le RequestBody, vous pouvez le faire via un filtre ou un intercepteur personnalisé. Tout d'abord, vous devez créer un filtre ou un intercepteur personnalisé, puis obtenir les données du corps de la requête dans le filtre ou l'intercepteur et les modifier. Enfin, les données modifiées sont renvoyées dans le corps de la demande pour un traitement ultérieur. De cette façon, le RequestBody peut être modifié dans Spring Gateway.

Contenu de la question

Je souhaite modifier le corps de la requête avant de l'acheminer vers l'uri donné. Basé sur la documentation que j'utilise

org.springframework.cloud.gateway.filter.factory.rewrite.modifyrequestbodygatewayfilterfactory Modifiez le texte. Lors du démarrage de mon serveur, le serveur ne démarre pas avec l'erreur suivante Cause : L'élément [spring.cloud.gateway.routes[0].filters[0].modifyrequestbody.class] n'est pas lié. nn opération : nn mettre à jour la configuration de l'application n","context":"valeur par défaut"}

Vous trouverez ci-dessous des exemples de filtres et de fonctions de réécriture

65bee659f312a

Ce qui suit est la fonction réécrite

65bee659f313a

Ce qui suit est 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
Copier après la connexion

Solution de contournement

Il y a quelques problèmes avec votre code :

  1. Pas besoin somefilter 类,只需直接从路由配置中使用 modifyrequestbody 即可。如果你确实需要它来实现 modifyrequestbody Ce qui ne peut pas être fait, il faut en faire un bean en ajoutant @component.
  2. Votre syntaxe de configuration yaml est incorrecte. Veuillez vous référer à la version révisée ci-dessous :
      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
Copier après la connexion
  • inclass : Nom de classe complet représentant la structure du corps de la demande d'origine.

  • outclass : représente le nom de classe complet de la structure du corps de la requête modifiée.

  • rewritefunction : fait référence au nom de classe complet qui implémente l'interface de fonction de réécriture, qui est utilisée pour convertir le corps de la requête du type original en nouveau type.

  • contenttype (facultatif) : Précisez ce paramètre lorsque vous souhaitez modifier le type de contenu demandé.

Supposons que vous souhaitiez convertir oldtype en newtype, voici l'implémentation de 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);
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal