请支持我!
Webservice(jersey restful):
@POST
@Path("/login")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_HTML)
public String login(
@QueryParam("name") String name,
@QueryParam("password") String password) {
System.out.println("[login] name: " + name);
System.out.println("[login] password: " + password);
}
Android应用:
StringRequest insertRequest = new StringRequest(Request.Method.POST, Config.BASE_URL + login, new Response.Listener<String>() {
// ...
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("name", name);
params.put("password", pass);
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
在服务器中,我收到的名称和密码为空。发生了什么事?
答案 0 :(得分:0)
@QueryParam
不能与json一起使用,它位于URI部分。例如users/query?from=100&to=200&orderBy=age&orderBy=name
,此URI的查询参数将为from
,to
,orderBy
。
要使用json,您需要对传入的JSON执行Object Mapper或接受输入为String并将其转换为json。
以下是一个示例:JSON example with Jersey + Jackson
自我转换为json的代码(使用Gson) Maven资源库到GSON
@POST
@Path("/login")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_HTML)
public String login(String jsonData) {
JsonParser parser = new JsonParser();
JsonObject o = parser.parse(jsonData).getAsJsonObject();
}