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?
Vous devez vous connecter pour publier un commentaire.
Il ne semble pas comme
RestTemplate
a un moyen d'ignorer{...}
. Au lieu de cela, générer unURI
de votreString
valeur (sans le double{}
).et l'utilisation de la surcharge
getForObject
méthode qui prend unURI
.{}
de @resouceId et il a couru, je suis d'erreur commejava.lang.IllegalArgumentException: URI is not absolute
donc, je pense à ma Chaîne url a été mauvais.{}
.java.lang.IllegalArgumentException: URI is not absolute
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.1.RELEASE</version> </dependency>
java.lang.IllegalArgumentException: protocol = http host = null
url
valeur avez-vous eu recours à l'exemple de la réponse? Parce que"localhost:8080/service"
fonctionne très bien. Peu importe, la question est à propos de la{}
et vous ne semblent pas être au travail dans ce contexte.MalformedURLException
parce que vous êtes absent un protocole dans votre url.fromHttpUrl
pour obtenir de l'exception levée plus tôt.U devrait voir le soucre de RestTemplate. La méthode de getForObject besoin de trois paramètres,comme
L' 'url' est la partie de l'url du préfixe(en face de '?') et "urlVariables' est un tableau de paramètres.