void返回值型別如何返回資料?
阿新 • • 發佈:2018-12-10
在寫controller的時候,有時候方法沒有返回值,但是卻可以向前臺傳遞資料,即返回值型別為void如下程式碼:
@RequestMapping(params = "datagrid") @ResponseBody public void datagrid(){ response.setContentType("text/text"); //設定請求以及響應的內容型別以及編碼方式 response.setCharacterEncoding("UTF-8"); JSONArray json = JSONArray.fromObject(textTemplate); //轉換 String str = json.toString(); //將json物件轉換為字串 response.getWriter.write(str); //將str字元傳輸到前臺 }
或者我的專案中出現的如下,
/** * 查詢資訊列表 * @param textTemplate * @param request * @param response * @param dataGrid */ @RequestMapping(params = "datagrid") @ResponseBody public void datagrid(TextTemplate textTemplate, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { CriteriaQuery cq = new CriteriaQuery(TextTemplate.class, dataGrid); cq.eq("accountId", ResourceUtil.getWeiXinAccountId()); String templateName = request.getParameter("templateName"); if(StringUtil.isNotEmpty(templateName)){ cq.like("templateName", templateName); } cq.add(); this.textTemplateService.getDataGridReturn(cq, true); TagUtil.datagrid(response, dataGrid); }
其實它們只是沒有使用return語句返回資料,這些方法使用的是將輸出流寫出的方式傳遞資料給前臺,使用到了HttpServletResponse 物件,通過三個步驟:
1.通過response獲得寫方法
PrintWriter pw=response.getWriter();
2.通過寫方法寫出資料
pw.write(object.toString());
3. flush() 將資料刷出
pw.flush();
,傳遞資料如上面展示的程式碼,是實現一個查詢資訊的功能,只需要將條件查詢出來的列表傳遞給前臺就可以了,方法的最後兩句程式碼,好像沒有見過,其實只是封裝了一下以上的這個寫出方法,點近TagUtil方法檢視下,果然:
/**
* 控制元件型別:easyui
* 返回datagrid JSON資料
* @param response
* @param dataGrid
*/
public static void datagrid(HttpServletResponse response,DataGrid dg) {
response.setContentType("application/json");
//response.setHeader("Cache-Control", "no-store");
JSONObject object = TagUtil.getJson(dg);
try {
PrintWriter pw=response.getWriter();
pw.write(object.toString());
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
,這種傳資料方式一般用在,後臺向前臺傳值和專案間傳資料時候使用較多。