【问题标题】:Call restfull webservice from android application从 android 应用程序调用 RESTful Web 服务
【发布时间】:2018-01-21 15:02:48
【问题描述】:

请支持我!

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);
}

安卓应用:

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;
        }

在服务器中,我收到的名称和密码为空。发生了什么?

【问题讨论】:

  • 我使用邮递员调用 webservice => OK

标签: java android web-services restful-authentication


【解决方案1】:

@QueryParam 不能与 json 一起使用,它在 URI 部分。例如users/query?from=100&amp;to=200&amp;orderBy=age&amp;orderBy=name,此URI 的查询参数将是fromtoorderBy

要使用 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();
}

您的邮递员工作的原因可能是因为您实际上是在发送x-www-form-urlencoded

【讨论】:

  • :(,还是没看懂,服务器应该怎么修?
  • 我发布了一个示例代码,使用 Gson 将字符串转换为 JsonObject。虽然这需要外部依赖
  • 如果你真的想使用QueryParam,你可以在安卓应用上更改发送表单x-www-form-urlencoded和响应json。如果您觉得此答案有帮助,请将其标记为已接受,以便下一个访问者可以快速找到它。
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多