0

我刚刚意识到可以在我的 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() */

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

问候。

4

3 回答 3

1

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

@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。球衣。如何以编程方式选择要返回的类型:JSON 还是 XML?

于 2013-07-25T18:07:00.537 回答
1

您可能需要一个通用函数来完成所有常见工作,然后简单地将这项工作传递给您概述的响应特定函数。

getHello(String responseType)
{
   // do all your work you'd end up doing in both functions
   switch (responseType):
       case ("json") {
                        return getJSONHello(work);    
                     }
       case ("text") {
                        return getPlainTextHello(work);
                     }

}
于 2013-07-25T17:20:41.997 回答
0

我对此进行了更多检查,对我有用的只是设置接受:

...
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", mime);
...

mime在哪里。这样我的服务器调用了 GET 函数之一。"text/plain""application/json"

无论如何,我很困惑为什么大多数答案都建议使用一个通用的函数来提供 @GET 并检查此函数中的类型...

于 2013-07-26T00:19:57.367 回答