Spring RestTemplate:URI 不是绝对的

2022-09-03 15:21:20

我正在尝试连接到运行我的webapp的同一服务器上的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());
}

谢谢。

更新:

我通过获取主机,端口等解决了它...从中可以看出,这可能是一个正确而优雅的解决方案吗?这是我实际的简化代码: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");
}

答案 1

如果服务在其他 Web 应用或同一服务器上运行,则 URL 不完整。app2/myservice?par=1

您必须通过提供基本URL手段来完成路径,然后这些内容可能适合您。localhost:8080/yourApp/app2/myservice?par=1

此外,请检查“包”访问权限。


答案 2

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

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


推荐