Spring RestTemplate:URI不是绝对的

Ale*_*dro 7 java spring uri

我正在尝试在运行我的Web应用程序的同一服务器上连接到Spring RESTful服务

我想使用“相对”路径,因为它可以安装在多个环境(本地主机,测试,生产环境)中,但出现错误消息: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());
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

更新:

我通过从那里获取主机,端口等来解决它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");
}
Run Code Online (Sandbox Code Playgroud)

kus*_*dev 6

app2/myservice?par=1如果您的服务在另一个 Web 应用程序或同一服务器上运行,则您的URL不完整。

您必须通过提供基本 URL 来完成路径,localhost:8080/yourApp/app2/myservice?par=1然后这些东西可能对您有用。

此外,检查包访问。


ban*_*cee 3

您不能将其作为第一个片段中的代码来执行;URI 必须完全标识您尝试访问的资源。您的第二个片段几乎是您可以做您想做的事情的唯一方法。可能还有其他方法,但我想不出任何方法。

当然,通过您的方法,您将在代码中规定您的系统架构和部署模型,这几乎从来都不是一个好主意。