带有 ASP.NET WebAPI 服务器的 Android 应用程序 - 发送复杂类型

标签 android json rest asp.net-web-api http-request-parameters

我有一个 Android 应用程序,它通过 Web 服务连接到我的 ASP.NET WebApi 服务器。我使用 AsyncHttpClient 发送请求,使用 RequestParams 将参数传递给服务器。现在我想将一个包含其他复杂对象列表的复杂对象发送到我的服务器,这就是问题所在。我该怎么做?对于简单类型,这很容易,因为我只需要多次调用 parameter.add("paramname", paramvalue); 相同的参数名称,并在服务器端收到一个列表.但是,当我的列表具有复杂类型以便我在服务器上收到包含这些复杂类型的列表时,调用应该是什么样子的?

假设我有一本包含作者列表的书:

class Book {
   string title;
   int year;
   List<Authors> authors;
}

class Author {
    string name;
    int    age;
}

我应该如何使用请求参数将一本书(包括作者)传递到我的服务器(假设服务器上的数据类看起来相同)?

我差点忘了服务器接受 JSON 作为格式。

谢谢

最佳答案

  1. 首先,您需要在您的 android 项目中声明书籍和作者 (POJO)。
  2. 然后您需要将您的复杂对象转换为 json 对象(您可以手动完成或使用 GSON Libary)

    Gson gson = new Gson();
    String jsonString = gson.toJson(myBook);
    JSONObject bookJsonObj = new JSONObject();
    
    try {
        bookJsonObj = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    
  3. 然后您可以使用像 Google Volley 这样的库将您的请求发布到服务器:

    JsonObjectRequest myJsonRequest = new JsonObjectRequest(Request.Method.POST,
                    ACTION_METHOD_URL, bookJsonObj , new Response.Listener<JSONObject>() {
    
        @Override
        public void onResponse(JSONObject jObj) {
    
        }
    }, new Response.ErrorListener() {
    
        @Override
        public void onErrorResponse(VolleyError error) {
    
        }
    });
    volleySingleton.addToRequestQueue(myJsonRequest, MY_REQUEST_TAG);
    
  4. 最后在您的 api Controller 中为请求添加 Action 方法

    public IHttpActionResult YourActionMethod(Book book)    
    {
        // do your request action here
    }
    

编辑:要通过 AsyncHttpClient 发布 JSON,请使用:

    StringEntity entity = new StringEntity(bookJsonObj.toString());
    client.post(context, ACTION_METHOD_URL, entity, "application/json",
            responseHandler)

关于带有 ASP.NET WebAPI 服务器的 Android 应用程序 - 发送复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852862/

相关文章:

android - 运行时异常运行 robolectric 测试 IntelliJ

java - 如何为 MVVM 模式链接 Retrofit 和 Repository/ViewModel?

Android - 如何使用 "select last_insert_rowid();"

java - 在 Android SQLite 数据库 onCreate() 中重新抛出异常

javascript - 带有多个对象的php请求json jquery

json - d3js json饼图

rest - 如何将 HashSet 传递到服务器以测试 postman 的 API?

ajax - 用于管理 session 并使用 JSON 响应 ajax 请求的 Delphi 服务器端框架?

java - 如何在 POST 期间获取不同资源的 JAX-RS @Path?

RESTful 软删除