2012-01-18 103 views
0

我需要让我的方法能够接受JSON数据。假设我需要使用JSON数据进行GET REST方法调用。如何在java中使用GET方法调用传递json数据RestAPI

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(){ 
} 
+0

第一个代码片段看起来像一个带'Request Body'的HTTP GET'request'。第二个代码片段看起来像某种'处理程序',它响应请求。你可以编辑来质疑和澄清一下,*问题在哪里?你在执行什么?服务器或客户端?问题是什么? – ArjunShankar 2012-01-18 09:45:42

+0

第一部分是请求url和请求正文。第二部分是处理该请求的方法。正在实施服务器端,使用restapi。 – Romi 2012-01-18 10:01:14

回答

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头(未请求机构):

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

服务器在HTTP报头“授权”很像这里的示例代码读取该: https://cwiki.apache.org/WINK/jax-rs-http-headers.html

然后用(Base64 apache commons class)对它进行解码。

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

1

从语法上看,您使用的是JAX-RS。

您需要使用@Consumes注释。

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

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

最终,你的方法应该被定义接受反序列化的对应于从客户端接收到的JSON主体的java对象,并且您需要设置一些东西,以便在调用方法之前完成这种反序列化。阅读第二个链接,了解如何做到这一点。

附注:GET方法通常没有'请求正文'。这有点奇怪。 POST方法用于发布请求体。尽管HTTP标准没有明确禁止GET请求来创建主体,但POST是适当的选择。

+0

ArjuneShankar:我可以在使用POST的方法中获取数据,但是我只需要仅使用请求主体进行GET。但即使在使用方法中也没有获取数据。我发现的所有例子都使用POST。请告诉我如何使用GET。 – Romi 2012-01-18 10:56:37

+0

@Romi - 就像我说过的,在GET方法中将某个东西“发布”给HTTP服务器是**怪异的**。这是一种POST方法。如果JAX-RS的实现根本无法与您正在做的工作一致,那么我不会感到惊讶。如果某些HTTP客户端实现无法在GET中发送主体,我也不会感到惊讶。为什么做这样一个奇怪的事情,当你可以做** **正确的POST? – ArjunShankar 2012-01-18 17:25:28

+0

其实我没有发布数据...我需要阅读这些数据并基于这些信息,想要获取一些数据。基本上这是登录,并通过GET传递loginId和密码。 – Romi 2012-01-19 04:56:19

相关问题