IllegalArgumentException: Nicht genügend Werte für Variablen zur Verfügung, mit RestTemplate?
Ich versuche zum ausführen von URL mit Hilfe der RestTemplate wie diese -
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();
}
}
Aber jedesmal erhalte ich eine Fehlermeldung wie diese -
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)
Was ich falsch mache und wie man es beheben?
Update:-
Habe ich versucht mit dieser url als gut, und es hat nicht für mich gearbeitet. Ich habe gerade ersetzt {@resourceId}
mit {{@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";
Update-2
Hier ist der 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();
}
Und der Fehler ist -
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)
Ist dies
Ich glaube, Sie brauchen, um zu entkommen
Ich habe versucht, und es hat nicht funktioniert für mich. Ich habe aktualisiert die Frage mit der URL, die ich versucht habe. Alle anderen Gedanken?
{@resourceId}
soll eine uri-variable oder ist es bedeutete, zu erscheinen buchstäblich in der uri? (Ich habe Sie als Favoriten markiert, ich werde später wieder prüfen.){@resourceId}
sollte in der url vorhanden, wie es ist, d.h. es erscheint buchstäblich in die uri, wie es ist.Ich glaube, Sie brauchen, um zu entkommen
{
und }
weil Sie daneben URI Variablen. Wenn ich richtig bin, sollte es {{@resourceId}}
. Ich werde sehen, was sich bald.Ich habe versucht, und es hat nicht funktioniert für mich. Ich habe aktualisiert die Frage mit der URL, die ich versucht habe. Alle anderen Gedanken?
InformationsquelleAutor john | 2014-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint nicht, wie
RestTemplate
ein Mittel zu ignorieren{...}
. Stattdessen erzeugen eineURI
von IhremString
Wert (ohne den doppelten{}
).und die überladene
getForObject
Methode, die eineURI
.{}
von @resouceId und es lief, bekam ich den Fehler wiejava.lang.IllegalArgumentException: URI is not absolute
also ich bin am überlegen meine String-url war falsch.Genau so, wie Sie es hatte, bevor wir das zweite set von
{}
.Ohh, ich habe gerade versucht, und nicht funktioniert und ich habe immer noch die gleichen Fehler -
java.lang.IllegalArgumentException: URI is not absolute
Scheint, wie Sie einige andere URI, nicht die, die du in deiner Frage oder meiner Antwort. Bearbeiten können Sie Ihre Frage mit dem vollständigen code und stack-trace?
Und wenn ich versuchte, mit 4.1.3, bekam ich diese Fehlermeldung -
java.lang.IllegalArgumentException: protocol = http host = null
InformationsquelleAutor Sotirios Delimanolis
U sollte die soucre von RestTemplate. Die Methode der getForObject müssen drei Parameter,wie
Die " url " ist der Teil der url - prefix(vor dem '?') und "urlVariables" ist ein array von Parametern.
InformationsquelleAutor Richard Xue