關於Struts2框架下回傳JSON資料被打斷的問題
阿新 • • 發佈:2018-11-09
在struts2的返回結果集做出瞭如下配置:
<package name="easyUIorder" extends="json-default">
<action name="queryList2" class="orderAction" method="query">
<interceptor-ref name="params" />
<result name="success" type="json">
<!-- <param name="root">returnDataMap</param> -->
</result>
</action>
</package>
在action進行封裝時,利用工具類將結果集轉換成json串:
List<SortOrder> orders = new LinkedList<SortOrder>();
if (StringUtils.isBlank(sort)) {
orders.add(SortOrder.asc("id"));
}
else {
orders. add(new SortOrder(sort, asc));
}
PagedList<Order> pList = orderService.findOrders(operationUserName,
order, page - 1, rows, orders);
Map map = new HashMap<>();
map.put("total", pList.getResultSize());
map.put("rows",pList.getList());
String jsonStr=JsonUtil.writeValueAsString(map);
ServletActionContext.getResponse().getWriter().write(jsonStr);
那麼此時json串回傳到頁面就出現了被打斷的情況。
分析:這裡我思考了很久才解決這個問題,因為之前一直使用註解很少採用配置檔案,所以有些配置也不是很清楚。這裡出現問題的主要原因還是因為進行了兩次JSON轉換。在action中把map轉換成JSON,然後在Struts2返回結果集的時候由於結果集型別設定為JSON型別,這裡會再次把回傳的資料JSON化一次。這樣的兩次轉換就把資料轉換成了打斷的JSON串。其實這個問題本身不難,只是沒想過來,希望其他的小夥伴遇到這個問題能夠通過這篇文章得以解決,避免浪費太多時間。