繁体   English   中英

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

[英]How to pass json data with GET method call in java RestAPI

我需要让我的方法能够接受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(){
}

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

您需要使用@Consumes注释。

@Consumes的文档位于: http@Consumes

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

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

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

如果您想使用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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM