如何在JavaAPI中通过GET方法调用传递json数据

如何在JavaAPI中通过GET方法调用传递json数据,java,json,rest,jackson,Java,Json,Rest,Jackson,我需要使我的方法能够接受JSON数据。假设我需要使用JSON数据进行GET REST方法调用 GET /player/login/ HTTP/1.0 Content-Type: application/json Request Body { "username": ”xyz”, "password": "234fsf34" } 我不知道如何在restapi方法中获取这个JSON数据 @GET @Path("player

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

GET /player/login/ HTTP/1.0 

Content-Type: application/json
Request Body    
{
                "username": ”xyz”,
                "password": "234fsf34"
}
我不知道如何在restapi方法中获取这个JSON数据

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

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

您需要使用
@Consumes
注释

该文档用于
@Consumes
位于:

下面是一个相当详细的教程(使用Jersey,参考JAX-RS实现):

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


另一方面:GET方法通常没有“请求主体”。有这种感觉有点奇怪。POST方法用于过帐请求主体。虽然HTTP标准没有明确禁止GET请求具有正文,但POST是合适的选择。

如果您想使用身份验证与
GET
,正确的方法是使用基本访问身份验证

客户端接受用户名和密码,并形成一个字符串,格式为
user:password
。因此,在您的示例中,这将是:

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

所以你会得到这样的结果:

"eHl6OjIzNGZzZjM0"
客户端在GET中发送,但作为HTTP头(而不是请求体):

服务器在HTTP头“Authorization”中读取此内容,与下面的示例代码非常相似:

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


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

第一个代码片段看起来像一个带有“请求体”的HTTP GET“请求”。第二个代码片段看起来像某种响应请求的“处理程序”。你能编辑一下问题并澄清一下问题在哪里吗?你在实施什么?服务器还是客户端?问题是什么?第一部分是请求url和请求正文。第二部分是处理该请求的方法。我使用restapi.ArjuneShankar实现服务器端:我能够使用POST在方法中获取数据,但我只需要使用请求体获取数据。但即使使用consume,我也无法使用in方法获取数据。我发现的所有例子都使用了POST。请告诉我如何在GET中使用它。@Romi-就像我说的,在GET方法中“发布”一些东西到HTTP服务器是很奇怪的。这就是POST方法的用途。如果JAX-RS的实现无法与您正在做的工作配合使用,我不会感到惊讶。如果一些HTTP客户机实现无法在GET中发送正文,我也不会感到惊讶。为什么要做这样一件奇怪的事情,当你可以做正确的一个帖子?实际上我不是发布数据…我只是需要阅读数据,并根据这些信息,想获取一些数据。基本上这是为了登录,我用GET传递loginId和密码。@Romi-你也可以用POST做同样的事情。将登录信息发布到服务器,服务器读取它,然后在响应中将数据发送回客户端。i、 e.
@POST
方法可以具有
@消耗
@产生
注释。
GET /player/login/ HTTP/1.0
  Content-Type: application/json
  Authorization: Basic eHl6OjIzNGZzZjM0