RestTemplate: comment envoyer les paramètres URL et query ensemble

j'essaye de passer le chemin param et d'interroger les params dans une URL mais je reçois une erreur étrange. ci-dessous le code

    String url = "http://test.com/Services/rest/{id}/Identifier"
    Map<String, String> params = new HashMap<String, String>();
    params.put("id", "1234");
    UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
                                        .queryParam("name", "myName");
    String uriBuilder = builder.build().encode().toUriString();
    restTemplate.exchange(uriBuilder , HttpMethod.PUT, requestEntity,
                    class_p, params);

et mon url devient http://test.com/Services/rest/%7Bid%7D/Identifier?name=myName

que dois-je faire pour le faire fonctionner. Je suis dans l'attente d' http://test.com/Services/rest/{id}/Identifier?name=myName pour que params ajoute de l'id à l'url

s'il vous plaît suggérer. merci à l'Avance

28
demandé sur Michal Foksa 2016-03-15 00:52:21

2 réponses

je voudrais utiliser buildAndExpandUriComponentsBuilder pour passer tous les types de paramètres URI.

Par exemple:

String url = "http://test.com/solarSystem/planet/{planet}/moon/{moon}";

// URI (URL) parameters
Map<String, String> uriParams = new HashMap<String, String>();
uriParams.put("planet", "Mars");
uriParams.put("moon", "Phobos");

// Query parameters
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
        // Add query parameter
        .queryParam("firstName", "Mark")
        .queryParam("lastName", "Watney");

System.out.println(builder.buildAndExpand(uriParams).toUri());
/**
 * Console output:
 * http://test.com/solarSystem/planet/Mars/moon/Phobos?firstName=Mark&lastName=Watney
 */

restTemplate.exchange(builder.buildAndExpand(uriParams).toUri() , HttpMethod.PUT,
        requestEntity, class_p);

/**
 * Log entry:
 * org.springframework.web.client.RestTemplate Created PUT request for "http://test.com/solarSystem/planet/Mars/moon/Phobos?firstName=Mark&lastName=Watney"
 */
69
répondu Michal Foksa 2016-10-19 15:03:38

Un problème avec la réponse de Michal Foksa est qu'il ajoute d'abord les paramètres de la requête, puis étend les variables de chemin. Si le paramètre de requête contient la parenthèse, par exemple {foobar}, ce qui causera une exception.

le moyen sûr est d'étendre les variables de chemin d'abord, puis d'ajouter les paramètres de requête:

String url = "http://test.com/Services/rest/{id}/Identifier";
Map<String, String> params = new HashMap<String, String>();
params.put("id", "1234");
URI uri = UriComponentsBuilder.fromUriString(url)
        .buildAndExpand(params)
        .toUri();
uri = UriComponentsBuilder
        .fromUri(uri)
        .queryParam("name", "myName")
        .build()
        .toUri();
restTemplate.exchange(uri , HttpMethod.PUT, requestEntity, class_p);
0
répondu holmis83 2018-05-30 07:46:15