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