java - 如何在不对 URL 进行硬编码的情况下调用我的 REST API get 方法?

标签 java spring rest tomcat jersey

我正在开发一个 REST API,我的想法是创建一个将调用该 API 的网站 (Java Webapp),以及一个也将调用该 API 的移动应用程序。

但是,尽管远未将上述任何内容在线发布(到我自己的域),但我看不出如果将我的应用程序部署在我的计算机以外的任何地方将如何工作。

这是因为我在商店里到处都是“localhost:8080”的硬编码实例!

例如:

server.xml(我使用的是 Tomcat 8.0.20):

<Engine defaultHost="localhost" name="Catalina">
...
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

SomeClass.java(这是我的网络应用程序中的类文件之一,不是我的 REST API)

final WebResource webResource = client.resource( "http://localhost:8080/api/get" );

上述 WebResource 来自 Jersey Client 1.8 依赖项,需要硬编码 URL 才能在指定路径访问我的 API。

这一切都在本地运行良好,但是当我将 API/Webapp 部署到生产环境中时,它肯定会停止运行,对吗?

我想我正在寻找以下三种解决方案之一:

  1. 某些实现允许我使用相对路径访问我的 REST API(例如,我只需要指定“/api/get”)。我计划在生产中的同一个域中同时部署 API 和 Webapp,所以我认为这不会成为问题(?)
  2. 一些动态确定适当基本 URL 的方法,无论我在哪个环境中部署应用程序,该方法都有效
  3. 任何其他可以使我的申请在这方面无懈可击的建议

我尝试使用选项 2

HttpServletRequest.getRequestURL()

虽然它返回了正确的路径(至少在本地 - http://localhost:8080 ),但我不断收到以下异常:

com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: The element type "hr" must be terminated by the matching end-tag "</hr>".

所以我暂时不使用这种方法。

感谢任何帮助。

谢谢:)

最佳答案

为了调用标准 Web 服务或 REST API,您需要在 Internet 上发布您的应用程序。

这意味着您不能使用本地主机,您将需要一个端点,该端点将从所有使用您的 API 的移动或网络应用程序访问。

这个端点就是你在客户端写的

client.resource("http://www.myApi.org/api/get");

并且这个基本 URL (www.myApi.org) 必须为所有使用您的 API 的客户所知。

关于java - 如何在不对 URL 进行硬编码的情况下调用我的 REST API get 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28986407/

相关文章:

java集合synchronizedMap不工作

java - 我无法从 Edittext 获取数据

multithreading - Spring Batch - 如何在多个线程中读取一个大文件?

java - Spring 5.x 缺少请求 header "Accept"

通过 CSV 文件的 Java Setters

java - 从 Android 中的 "values"文件夹获取字符串资源

java - MyBatis 3 + PostgreSQL - 在插入时获取主键值

java - spring-XD 不读取 logback.xml

python - django rest framework 没有身份验证没有权限

javascript - Backbone.js Restful json API 设计