如何在java Rest API中使用GET方法调用传递json数据

时间:2012-01-18 09:11:03

标签: java json rest jackson

我需要让我的方法能够接受JSON数据。假设我需要使用JSON数据进行GET REST方法调用。

GET /player/login/ HTTP/1.0 

Content-Type: application/json
Request Body    
{
                "username": ”xyz”,
                "password": "234fsf34"
}

我没有得到如何在我的REST API方法中获取此JSON数据。

@GET
@Path("player/login")
@Produces("application/json)
public responseData loginPlayer(){
}

2 个答案:

答案 0 :(得分:1)

从语法来看,您似乎正在使用JAX-RS。

您需要使用@Consumes注释。

@Consumes的文档位于: http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html#gipyt

一个相当详细的教程(使用Jersey,参考JAX-RS实现)在这里: http://blogs.oracle.com/enterprisetechtips/entry/configuring_json_for_restful_web

最后,应该定义您的方法以接受与从客户端接收的JSON主体相对应的反序列化的 java对象,并且您需要设置一些内容,以便在方法获得之前完成此反序列化调用。阅读第二个链接,了解如何操作。

旁注:GET方法通常没有“请求正文”。拥有它有点奇怪。 POST方法用于发布请求正文。虽然HTTP标准没有明确禁止GET请求拥有正文,但POST是合适的选择。

答案 1 :(得分:1)

如果您想使用GET认证,“正确”的方法是使用基本访问认证。

http://en.wikipedia.org/wiki/Basic_access_authentication

客户端获取用户名和密码,并形成user:password形式的字符串。所以在你的例子中,那将是:

"xyz:234fsf34"

客户端然后base64对此字符串进行编码。如果客户端也是Java,则可以使用apache commons Base64类进行编码/解码:

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

所以你会得到类似的东西:

"eHl6OjIzNGZzZjM0"

客户端在GET中发送它,但作为HTTP头(不是Request Body):

GET /player/login/ HTTP/1.0
  Content-Type: application/json
  Authorization: Basic eHl6OjIzNGZzZjM0

服务器在HTTP Header'Authorization'中读取它,就像这里的示例代码一样: https://cwiki.apache.org/WINK/jax-rs-http-headers.html

然后使用(Base64 apache commons类)对其进行解码。

然后您可以使用适当的数据回应GET。