• struts返回json数据


      想要在struts中返回json格式数据有两种办法。

      1.使用servlet的输出流

      实际上就是在struts中获取response对象的输出流。然后写入你要返回的json数据,本质和用servlet返回json数据是一样的,需要自己导入json的jar包。不做详细介绍。

      2.试用struts对json的扩展

      这里需要两个jar包,xwork-core-2.1.6.jar和struts2-json-plugin-2.1.8.jar。如果是用MyEclipse注入的struts环境就不需要手动了。下面以一个例子讲解。

     1 package action;
     2 
     3 import java.util.HashMap;
     4 import java.util.List;
     5 import java.util.Map;
     6 
     7 import org.apache.struts2.json.annotations.JSON;
     8 
     9 import com.opensymphony.xwork2.ActionSupport;
    10 
    11 import entity.Outbox;
    12 import util.DaoFactory;
    13 
    14 public class SendBoxJson extends ActionSupport {
    15     private static final long serialVersionUID = 1L;
    16     private Map<String,Object> data;
    17     private String state;
    18     
    19     private String userId;
    20     private String searchType;
    21     private String keyValue;
    22     private String start;
    23     private String end;
    24 
    25     
    26 
    27     
    28 
    29     public Map getData() {
    30         return data;
    31     }
    32     
    33     public String getState() {
    34         return state;
    35     }
    36 
    37 
    38     public void setUserId(String userId) {
    39         this.userId = userId;
    40     }
    41 
    42     public void setSearchType(String searchType) {
    43         this.searchType = searchType;
    44     }
    45 
    46     public void setKeyValue(String keyValue) {
    47         this.keyValue = keyValue;
    48     }
    49 
    50     public void setStart(String start) {
    51         this.start = start;
    52     }
    53 
    54     public void setEnd(String end) {
    55         this.end = end;
    56     }
    57 
    58     public String getJson() throws Exception {
    59         List<Outbox> list = DaoFactory.getOutBoxDaoInstance().getOutMails(userId, searchType, keyValue, start, end);
    60         state="success";
    61         data=new HashMap<String,Object>();
    62         data.put("data", list);
    63         data.put("state",state);
    64         System.out.println(data);
    65         return "heihei";
    66     }
    67 }

    上面的是一个普通的struts类,没什么特殊之处。重点在struts的配置文件中。

     1     <package name="json" namespace="/" extends="struts-default,json-default">
     2         <action name="json" class="action.SendBoxJson" method="getJson">
     3             
     4             <result name="heihei" type="json">
     5 
     6                 <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
     7                 <param name="root">data</param>
     8                 <!-- 指定是否序列化空的属性 -->
     9                 <param name="excludeNullProperties">true</param>
    10                 <!-- 这里指定将序列化list中的那些属性 -->
    11                 <!-- <param name="includeProperties">data.*</param> -->
    12                 <!-- 这里指定将要从list中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现 -->
    13                 <!-- <param name="excludeProperties">id</param> -->
    14             </result>
    15         </action>
    16     </package>

    在配置中,首先需要action所在的package继承了json-default,或者继承的父包继承了json-default。然后result里多了个type=“json”这是说明返回的是json字符串。

    <param name="root">data</param>要讲data这个变量序列化后返回,data是上面struts类中一个变量。

    注意如果data类型为list,需要使用

    <param name="includeProperties">data.*</param>来指定,否则返回的json字符串会为空。

    如果想要忽略对象的某个属性,可在属性的get方法加@JSON(serialize=false) ,常用在hibernate的实体中,如果返回的是hibernate实体,该实体又用到了另一个实体,就会因为懒加载的原因序列化失败(自行百度),就需要在某些属性加上上面的注释。

    上面的set是一对多关系的表示.

  • 相关阅读:
    【微积分】 02
    【微积分】 01
    【线性代数】 09
    云南国庆八日游策划书
    Kubectl工具常用命令
    Linux 常用命令缩写及对应的
    kubectl工具的windows安装方法
    Intellij IDEA工具的常用快捷键
    如何理解docker镜像build中的上下文
    【转】在服务器上排除问题的头五分钟&常用命令
  • 原文地址:https://www.cnblogs.com/wuyoucao/p/6869716.html
Copyright © 2020-2023  润新知