[英]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.