web-dev-qa-db-ja.com

Spring RestTemplate:URIは絶対ではありません

Webアプリが実行されている同じサーバー上のSpring RESTfulサービスに接続しようとしています。

「相対」パスを使用したいのは、いくつかの環境(localhost、test、production)にインストールできるからですが、エラーメッセージが表示されます: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");
}
7
Alessandro

最初のスニペットのコードとしてはできません。 URIは、取得しようとしているリソースを完全に識別する必要があります。 2番目のスニペットは、あなたがしようとしていることを行うことができる唯一の方法です。他の方法もあるかもしれませんが、頭の上のものは考えられません。

もちろん、あなたのアプローチでは、システムアーキテクチャと展開モデルを決定しますin code考え。

0
banncee

あなたのURL app2/myservice?par=1は、サービスが別のWebアプリまたは同じサーバーで実行されている場合は完了しません。

ベースURLにlocalhost:8080/yourApp/app2/myservice?par=1その後、物事はあなたのために働くかもしれません。

また、パッケージアクセスを確認します。

2
kushal Baldev