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}  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/55eb7aabf3c8315b49845b11db0dd3c4.html