1. 程式人生 > >void返回值型別如何返回資料?

void返回值型別如何返回資料?

在寫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();
		}
	}

 ,這種傳資料方式一般用在,後臺向前臺傳值和專案間傳資料時候使用較多。