IllegalArgumentException: Pas assez de valeurs de variables disponibles avec RestTemplate?

Je suis en train d'exécuter des URL en utilisant le RestTemplate comme celui -

public static void main(String[] args) throws UnsupportedEncodingException {
    RestTemplate restTemplate = new RestTemplate();
    String url = "http://ptr.vip.host.com/pss/repositories/pssdb/branches/main/query/Service[@alias="
                        + "hello"
                        + "].serviceInstances.runsOn{@resourceId}?allowScan=true&limit=10000&skip=0";
    try {
        String response = restTemplate.getForObject(url, String.class);
        System.out.println(response);
    } catch (RestClientException ex) {
        ex.printStackTrace();
    }
}

Mais à chaque fois je suis d'erreur comme celui -

Exception in thread "main" java.lang.IllegalArgumentException: Not enough variable values available to expand '@resourceId'
    at org.springframework.web.util.UriComponents$VarArgsTemplateVariables.getValue(UriComponents.java:272)

Ce qui est mal, je suis en train de faire et comment le résoudre?

Mise à jour:-

J'ai essayé avec cette url de bien et ça n'a pas fonctionné pour moi. Je viens de remplacer {@resourceId} avec {{@resourceId}}

String url = "http://ptr.vip.host.com/pss/repositories/pssdb/branches/main/query/Service[@alias="
                        + "hello"
                        + "].serviceInstances.runsOn{{@resourceId}}?allowScan=true&limit=10000&skip=0";

Mise à jour-2

Voici le code -

try {

    UriComponentsBuilder builder = UriComponentsBuilder
            .fromPath("http://ptr.vip.str.host.com/pss/repositories/pssdb/branches/main/query/Service[@alias="
                    + "hello"
                    + "].serviceInstances.runsOn{@resourceId}?allowScan=true&limit=10000&skip=0");
    UriComponents uriComponents = builder.build();
    URI uri = uriComponents.toUri();

    String response = restTemplate.getForObject(uri, String.class);
    System.out.println(response);

} catch (RestClientException ex) {
    ex.printStackTrace();
}

Et l'erreur est -

Exception in thread "main" java.lang.IllegalArgumentException: URI is not absolute
    at java.net.URI.toURL(URI.java:1095)
    at org.springframework.http.client.SimpleClientHttpRequestFactory.createRequest(SimpleClientHttpRequestFactory.java:109)
    at org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor.java:76)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:479)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:460)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:228)
  • Est-ce {@resourceId} destiné à être un uri variable ou est-il destiné à apparaître littéralement dans l'uri? (Je l'ai marqué comme favori, je vais vérifier à nouveau plus tard.)
  • {@resourceId} devrait être présent dans l'url c'est en ce sens qu'elle apparaît littéralement dans l'uri comme il est.
  • Je crois que vous avez besoin pour échapper à { et } parce qu'ils marquent variables URI. Si je suis en droit, il devrait être {{@resourceId}}. Je vais le regarder bientôt.
  • J'ai essayé et ça ne fonctionne pas pour moi. J'ai mis à jour la question avec l'URL que j'ai essayé. Toutes les autres pensées?
InformationsquelleAutor john | 2014-12-18