使用输出流返回数据

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

 ,这种传数据方式一般用在,后台向前台传值和项目间传数据时候使用较多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值