我正在为我的Android应用创建一个登录功能,该功能将连接到Jersey RESTful Web服务。作为服务调用的一部分,我将发送一个JSON对象,但我现在的问题是我不知道如何解密Web服务端的JSON。这是我的代码:
Android(AsyncTask - doInBackground):
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://X.X.X.X:8080/HearIt/services/AuthMySQL");
post.setHeader("content-type", "application/json");
JSONObject dato = new JSONObject();
dato.put("email", params[0]);
dato.put("password", Object_Cipher.init(params[1]));
StringEntity entity = new StringEntity(dato.toString());
post.setEntity(entity);
HttpResponse resp = httpClient.execute(post);
return EntityUtils.toString(resp.getEntity());
} catch (Exception E) {
E.printStackTrace();
}
网络服务:
@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public String AuthMySQL("WHAT I NEED PUT HERE") {
return "none";
}
为了能够获取JSON数据,我需要做什么?感谢。
答案 0 :(得分:1)
我建议您阅读JAX-RS中的Request and Response entities。您还应该阅读JAX-RS specification的第3.3节,因为它涵盖了如何处理JAX-RS中的参数的(非常)技术方面。在最简单的情况下,您可以简单地为资源方法提供一个字符串参数,并将传入的数据(JSON)存储到其中:
@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public String AuthMySQL(String json) {
System.out.println("The JAX-RS runtime automatically stored my JSON request data: " + json);
}
当然,这并没有利用JAX-RS可以提供的自动映射。正确设置后,运行时实际上可以将传入数据直接反序列化为Java类(假设您已创建了一个)。因此,例如,给定以下类:
class LoginData {
private String email;
private String password;
// constructors, getters/setters
}
您可以选择直接将请求数据编组到其中:
@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public String AuthMySQL(LoginData data) {
System.out.println("The JAX-RS runtime automatically deserialized my JSON request data: " + data);
}
要成功完成此操作,您需要在应用程序中包含jersey-json模块。
答案 1 :(得分:0)
我会尝试为您提供一个通用示例。
假设您要使用以下JSON:
{ "user": {
"name": "john",
"age": 20,
"country": "austria"
}
}
您必须创建以下类:
class User {
String name;
Integer age;
String country;
// getters, setters, whatevers
}
并在网络服务中:
@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public String consumeUserName(User user) {
return user.getName();
}