Spring RestTemplate:URI 不是绝对的

新手上路,请多包涵

我正在尝试连接到运行我的 webapp 的同一台服务器上的 _Spring RESTful 服务_。

我想使用“相对”路径,因为它可以安装在多个环境(本地主机、测试、生产)上,但我收到错误消息: 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");
}

原文由 Alessandro 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

您不能像第一个片段中的代码那样做; URI 必须完全标识您要访问的资源。你的第二个片段几乎是你可以做你想做的事情的唯一方法。可能还有其他方法,但我想不出任何办法。

当然,使用您的方法,您是 在代码 中指定您的系统架构和部署模型,这几乎不是一个好主意。

原文由 banncee 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

另外,检查包访问。

原文由 kushal Baldev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏