Struts2返回JSON对象的方法总结
Struts2返回JSON对象的方法总结
如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好的支持。但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况。本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于既定框架结构下进行的。
Struts2返回JSON有两种方式:1.使用Servlet的输出流写入JSON字符串;2.使用Struts2对JSON的扩展。
一.使用Servlet的输出流
JSON接口的实质是:JSON数据在传递过程中,其实就是传递一个普通的符合JSON语法格式的字符串而已,所谓的“JSON对象”是指对这个JSON字符串解析和包装后的结果。
所以这里只需要将一个JSON语法格式的字符串写入到Servlet的HttpServletResponse中,这里使用的是PrintWriter的方式,当然也可以采用Stream流的方式。需要注意的是:在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码), HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。
编写接口代码:
这里的方法与一般的Struts2方法的区别是这里是void返回类型。
- public void write() throws IOException{
- HttpServletResponse response=ServletActionContext.getResponse();
- /*
- * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码),
- * HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会
- * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。
- * */
- response.setContentType("text/html;charset=utf-8");
- //response.setCharacterEncoding("UTF-8");
- PrintWriter out = response.getWriter();
- //JSON在传递过程中是普通字符串形式传递的,这里简单拼接一个做测试
- String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"张三\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
- out.println(jsonString);
- out.flush();
- out.close();
- }
配置action
从以下的配置中可以明显的看到配置与普通的action配置没有任何区别,只是没有返回的视图而已。
<action name="write" class="json.JsonAction" method="write" />
返回值
Console代码
{"user":{"id":"123","name":"张三","say":"Hello , i am a action to print a json!","password":"JSON"},"success":true}
|
评论暂时关闭