我試圖在我的webapp運行的服務器上連接到Spring RESTful服務。Spring RestTemplate:URI不是絕對的
我想使用「相對」路徑,因爲它可以安裝在幾個環境(本地主機,測試,生產),但我得到的錯誤消息:URI is not absolute
。
如何在同一臺服務器上調用另一個webapp上運行的服務?
我的代碼是像以下:
final RestTemplate restTemplate = new RestTemplate();
URI uri;
try {
String url = "app2/myservice?par=1";
uri = new URI(url);
String result = restTemplate.getForObject(uri, String.class);
System.out.println(result);
} catch (URISyntaxException e) {
logger.error(e.getMessage());
}
感謝。
更新:
我解決它通過讓主機,端口等......從request
,可以說,它是一個正確而優雅的解決方案?這是我的實際簡化代碼:
String scheme = request.getScheme();
String userInfo = request.getRemoteUser();
String host = request.getLocalAddr();
int port = request.getLocalPort();
String path = "/app2/myservice";
String query = "par=1";
URI uri = new URI(scheme, userInfo, host, port, path, query, null);
boolean isOK = restTemplate.getForObject(uri, Boolean.class);
if (isOK) {
System.out.println("Is OK");
}
編碼不適合網址!它的參數值。刪除這一行:'String urlEncoded = URLEncoder.encode(url,UTF_8);' –
好的,我刪除了編碼,但無論如何我需要指定一個相對的url,這可能嗎?謝謝 – Alessandro
相對於什麼?沒有任何上下文,應用程序不知道它是如何從外部訪問的。如果你有權訪問HttpServletRequest,你可以看到那個對象認爲你的應用程序被訪問過,但即使這樣也不需要完美,如果在你自己的Java應用服務器前面有反向代理。在瀏覽器中運行JavaScript代碼很容易,但對於服務器端應用程序來說確實很難。 –