web-dev-qa-db-fra.com

Angular 7 HTTP GET envoyer un objet JSON comme paramètre

Im essayant d'envoyer une structure json à un service de repos à partir de angular faisant quelque chose comme ça

  let test5var = {
                    "test5var1": {
                        "test5var2": "0317",
                        "test5var3": "9556"
                    },
                    "test5var4": "123",
                    "test5var": "0000046"
                }
let dataPrincipalBlnc = {"test": {"test1": {"test2": "0317","test3": {"IDIOMA_ISO": " en","DIALECTO_ISO": "US"},"channel": "INT"},"input": {"test5": test5var}}};

let headers = new HttpHeaders();
    headers.append('Content-Type', 'application/json');

    let params = new HttpParams().set("requestData", dataPrincipalBlnc.toString()).set("authenticationType", this.authType);


    return this.http.get(this.url, {params: params}); 

Le résultat de la demande doit ressembler à ceci:

https://example.com/test?authenticationType=cookie&requestData=%7B%test%22:%7B%22test1%22:%7B%22test2%22:%220317%22,%22test3%22:% 7B% 22IDIOMA_ISO% 22:% 22 + en% 22,% 22DIALECTO_ISO% 22:% 22US% 22% 7D,% 22channel% 22:% 22INT% 22% 7D,% 22input% 22:% 7B% 22test5% 22:% 7B% 22test5var1% 22:% 7B% 22test5var2% 22:% 220317% 22,% 22test5var3% 22:% 229556% 22% 7D,% 22test5var4% 22:% 22123% 22,% 22test5var5% 22:% 220000986% 22% 7D% 7D% 7D% 7D

Mais il est actuellement envoyé sous la forme:

https://example.com/test?requestData=%5Bobject%20Object%5D&authenticationType=cookie

Des idées comment envoyer l'objet json à la première demande? Dois-je convertir manuellement le json en un format uri valide?

Dans angularJS fonctionne très bien en utilisant simplement le code suivant:

var data = {
      "test1": {
        "test2": {
          "test3": "0317",
          "test4": {
            "IDIOMA_ISO": " en",
            "DIALECTO_ISO": "US"
          },
          "channel": "INT"
        },
        "input": {
          "test5": test5var
        }
      }
};
$http.get(url, {
      params: {
        authenticationType: authType,
        requestData: data
      }
    }).then(success(deferred), error(deferred));

J'ai également essayé d'utiliser le code suivant, mais le résultat ajoute plus de caractères et le backend échoue car il dit que le JSON n'est pas dans un format valide:

encodeURIComponent(JSON.stringify(dataPrincipalBlnc)

? requestData =% 257B% 2522test% 2522% 253A% 257B% 2522test1% 2522% 253A% 257B% 2522test2% 2522% 253A% 25220317% 2522% 252C% 2522test3% 2522% 253A% 257B% 2522IDIOMA_ISO% 2522 2520en% 2522% 252C% 2522DIALECTO_ISO% 2522% 253A% 2522US% 2522% 257D% 252C% 2522channel% 2522% 253A% 2522INT% 2522% 257D% 252C% 2522entrée% 2522% 253A% 257B% 2522test5% 2522% 252% 2522test5var1% 2522% 253A% 257B% 2522test5var2% 2522% 253A% 25220317% 2522% 252C% 2522test5var4% 2522% 253A% 25229556% 2522% 257D% 252C% 2522test5var4% 2522% 253A% 2522225%% 253A% 25220003303% 2522% 257D% 257D% 257D% 257D & authenticationType = cookie

Merci Cordialement

6
Endika

Je viens de résoudre le problème en définissant les données en tant qu'objet et en utilisant uniquement le JSON.stringify:

let dataPrincipalBlnc: object;

let dataPrincipalBlnc = {"test": {"test1": {"test2": "0317","test3": {"IDIOMA_ISO": " en","DIALECTO_ISO": "US"},"channel": "INT"},"input": {"test5": test5var}}};

let params = new HttpParams().set("requestData", JSON.stringify(dataPrincipalBlnc)).set("authenticationType", this.authType);

Merci pour votre aide Cordialement

0
Endika