如何将正确的json从服务器端java返回到datatables?

yizd12fk  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(373)

如何连接两个数组,然后将结果作为json返回给datatables?
我正在转换一个工作的datatables以包含服务器端处理,并且一直在从java服务器端返回正确的数组。当前返回的数组是:

List<YthMmbrSectDtls> ymList;

示例数据为:

[{"youthMemberID":"MTQ5","surname":"Tendon","firstName":"Achilles"}]

对于datatables服务器端,我需要在返回的json的开头包含额外的信息,例如:

{"draw":9, "recordsTotal:57", "recordsFiltered:57"[...]}

所以我回来了:

{"draw":9, "recordsTotal:57", "recordsFiltered:57","data":[{"youthMemberID":"MTQ5","surname":"Tendon","firstName":"Achilles"}]}

至少这是我通过阅读手册和观看视频的理解。
我现在的代码是:

List<YthMmbrSectDtls> ymList;
String[] dtInfo = {"draw", "recordsTotal", "recordsFiltered"};

ymList = MySQLConnection.getYouthMmbrAllDtls(archived);

//Test to be replaced by database call, as per above
dtInfo[0] = "9";
dtInfo[1] = "57";
dtInfo[2] = "57";

if (ymList == null || ymList.isEmpty()) {
    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No members.");
} else {
    System.out.println("ymList: " + ymList);
    String json = new Gson().toJson(ymList);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}
eh57zj3b

eh57zj3b1#

有多种不同的解决方法:

修改jsonelement树

你可以先用 Gson.toJsonTree(Object) 转换 ymList 到内存中的 JsonArray 然后把它包在一个盒子里 JsonObject 在其中添加 dtInfo 属性:

JsonObject dtInfoJsonObj = new JsonObject();
dtInfoJsonObj.addProperty​("draw", dtInfo[0]);
dtInfoJsonObj.addProperty​("recordsTotal", dtInfo[1]);
dtInfoJsonObj.addProperty​("recordsFiltered", dtInfo[2]);

Gson gson = new Gson();
JsonArray ymJsonArray = gson.toJsonTree(ymList).getAsJsonArray();
dtInfoJsonObj.add("data", ymJsonArray);

String json = gson.toJson(dtInfoJsonObj);

在单独的类中 Package 数据

或者您可以创建一个单独的类,例如。 DtInfo ,它包含属性和数据,然后让gson序列化。这种方法可能更有效,因为没有创建jsonelement树的中间步骤。

class DtInfo {
    // Gson will use the field names during serialization; you can also customize them
    // using `@SerializedName`
    // Additionally you can make the fields private if you want
    public final int draw;
    public final int recordsTotal;
    public final int recordsFiltered;
    public final List<YthMmbrSectDtls> data;

    public DtInfo(int draw, int recordsTotal, int recordsFiltered, List<YthMmbrSectDtls> data) {
        this.draw = draw;
        this.recordsTotal = recordsTotal;
        this.recordsFiltered = recordsFiltered;
        this.data = data;
    }
}

然后像这样创建json:

DtInfo dtInfoObj = new DtInfo(dtInfo[0], dtInfo[1], dtInfo[2], ymList);
String json = new Gson().toJson(dtInfoObj);

还请注意,通过存储 Gson 示例 static final 现场。gson是线程安全的(请参阅类文档),这样它将缓存内部用于将对象转换为json的类型适配器。
此外,gson还提供 toJson 接受 Appendable . 因此你可以通过考试 response.getWriter() 这些gson方法避免了创建中间 String json的表示。

相关问题