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返回类型。

  1. public void write() throws IOException{   
  2.     HttpServletResponse response=ServletActionContext.getResponse();   
  3.     /*  
  4.      * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码),  
  5.      * HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会  
  6.      * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。  
  7.      * */  
  8.     response.setContentType("text/html;charset=utf-8");   
  9.     //response.setCharacterEncoding("UTF-8");   
  10.     PrintWriter out = response.getWriter();   
  11.     //JSON在传递过程中是普通字符串形式传递的,这里简单拼接一个做测试   
  12.     String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"张三\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";   
  13.     out.println(jsonString);   
  14.     out.flush();   
  15.     out.close();   
  16. }  

配置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}  

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容