java - 不同 MIME 的多个 @GET - 如何使用普通的 HttpURLConnection() 来使用它

标签 java web-services http rest

我刚刚意识到可以在我的 RESTful 资源 .java 文件中定义类似的内容:

@GET
@Produces("text/plain")
public String getPlainTextHello() { ... }

@GET
@Produces("application/json")
public String getJSONHello() { ... }

这不是很棒吗?但请稍等......

问题

我正在通过简单的客户端使用我的 API。在 HttpURLConnection 的帮助下,类似于此代码:

URL obj = new URL("http://some.url/res/hello");
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("GET");
... /* get response ... conn.getInputStream() */

服务器如何“知道”调用哪一个方法来为客户端提供服务?

问候。

最佳答案

首先,您应该考虑对不同类型的“产品”使用相同的方法:

@GET 
@Produces({ "application/xml", "text/plain"}) 
public String getHello() { ... }

不同类型的“产生”可以由 JAXB 处理(如果响应是一个对象......)。

您可以使用以下方法定义客户端“接受”mime 类型:

String uri = 
    "http://localhost:8080/hello/";
URL url = new URL(uri);
HttpURLConnection connection = 
    (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");

此问题提供了与此问题相关的更多见解(以及其他客户端框架):REST. Jersey. How to programmatically choose what type to return: JSON or XML?

关于java - 不同 MIME 的多个 @GET - 如何使用普通的 HttpURLConnection() 来使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17864158/

相关文章:

java - 接收一个包含数组的 JSONObject 并填充 ListView

java - 如何在面板上通过 float 组和日期数组制作图表?

java - 如何在 eWay Web 服务上创建 eWayHeader

java - 使用 Copy.CopyIng Items Web 服务将文件上传到 SharePoint 2010 时收到 400 错误请求

java - 调用 web 服务 : javax.net.ssl.SSLException:收到致命警报:protocol_version

security - 是否可以为不存在的资源返回 HTTP 401 而不是 404 以防止信息泄露?

java - 多次插入 SQL 数据库

java - 自定义 Eclipse 重构预览中的错误

node.js 表达 maxAge 设置

java - cz.msebera.android.httpclient.client.HttpResponseException : Unauthorized