Spring RESTfulサービスに、私のwebappが実行されているのと同じサーバーに接続しようとしています。Spring RestTemplate:URIが絶対ではありません
私はいくつかの環境(localhost、test、production)にインストールすることができるので、 "相対"パスを使用したいと思いますが、エラーメッセージ:URI is not absolute
が表示されます。
同じサーバー上の別のWebアプリケーションでサービスを実行するにはどうすればよいですか?
私のコードは次のようなものです:
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");
}
エンコーディングはURLのnogです!そのパラメータ値です。この行を削除します: 'String urlEncoded = URLEncoder.encode(url、UTF_8);' –
私はエンコードを削除しましたが、とにかく相対URLを指定する必要があります。ありがとう – Alessandro
何に相対?コンテキストがなければ、アプリケーションは外部からのアクセス方法を知らない。 HttpServletRequestにアクセスすると、そのオブジェクトがあなたのアプリケーションがアクセスされたと考えるものを知ることができます。しかし、自分のJavaアプリケーションサーバーの前に逆プロキシがある場合は完璧である必要はありません。ブラウザーで実行されているJavaScriptコードでは相対リクエストを作成するのは簡単ですが、サーバーサイドアプリケーションでは難しいです。 –