1. 程式人生 > >struts2對json的支持

struts2對json的支持

contex 編寫 rim red 部分 轉發 .org inpu 技術

方式一:自行構造json

1)導入jar包:

  xstream 或者 Jackson,推薦使用Jackson,效率高

2)引入struts2,書寫配置文件

3)修改action配置,修改result返回的jsp頁面,頁面只留下${requestScope.json}

下面是我之前做的安卓服務器例子:

action配置

<!-- 設置全局轉發地址,專門發送JSON對象 --> 因為我做後臺所有信息都是json格式,所以就用了全局設置
        <global-results>  
            <result name="success">
/WEB-INF/return.jsp</result> <result name="input">/err.jsp</result> </global-results>

action類

/**
     * 登陸
     * session中添加數據
     */
    public String login() {

        User login = userService.login(user);

        ActionContext ac = ActionContext.getContext();

        Map
<String, Object> application = ac.getApplication(); if (application.get("user:" + user.getId()) == null) application.put("user:" + user.getId(), user); ActionUtil.putRequestParam(JsonUtil.toJson(login)); //該句是重點,把對象轉換成json,然後保存到域對象中 return "success"; }

public class ActionUtil {

  public static void putRequestParam(String res) {
    ActionContext context = ActionContext.getContext(); //因為Action是多例的所以直接在外部可以獲取ActionContext對象
    Map<String, Object> requestMap = context.getContextMap();
    requestMap.put("result", res);
  }

}

return.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 ${result}

瀏覽器獲取到數據再調用trim()方法除去空行即可

方式二:使用Struts2的struts2-json-plugin.jar插件返回JSON數據。

該部分轉載:轉自:http://www.cnblogs.com/liubaozhe/p/4418741.html

一、其中主要步驟有:

1.將struts2-json-plugin.jar插件拷貝到項目的"/WEB-INF/lib"文件夾下;

2.編寫Action類文件;

3.在struts.xml文件中配置這個Action,這個Action所在的"<package.../>"必須繼承”json-default“, Action 的 Result 類型為 json ,即 type="json" ,而且不對應任何視圖資源。

二、示例代碼:

Action類文件:

技術分享
package com.example.action;

import java.util.ArrayList;

import com.opensymphony.xwork2.ActionSupport;

public class StrutsJsonAction extends ActionSupport {
    private int i=123;
    private String str="str";
    private int[] array={1,2,3};
    private ArrayList<String> list;
    
    public int getI() {
        return i;
    }
    public void setI(int i) {
        this.i = i;
    }
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public int[] getArray() {
        return array;
    }
    public void setArray(int[] array) {
        this.array = array;
    }
    public ArrayList<String> getList() {
        return list;
    }
    public void setList(ArrayList<String> list) {
        this.list = list;
    }
    public String execute(){
        list = new ArrayList<String>();
        list.add("red");
        list.add("green");
        list.add("yellow");
        return SUCCESS;
    }
}
技術分享

struts.xml文件:

技術分享
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="json-example" namespace="/" extends="json-default">
        <action name="JSONExample" class="com.example.action.StrutsJsonAction">
            <result name="success" type="json"/>
        </action>
    </package>
</struts>    
技術分享

然後在瀏覽器中訪問" http://localhost:8080/Struts2_JSON/JSONExample ",顯示結果如圖:

技術分享

JSON 插件會將所有可序列化 Action 屬性序列化為 JSON 數據。

三、配置常用JSON類型的Result

瀏覽器是否緩存JSON

<result type="json">
  <!-- 取消瀏覽器緩存-->
  <param name="noCache">true</param>
</result>

設置瀏覽器響應類型,默認為text/html

<result type="json">
  <!-- 設置服務器響應類型-->
  <param name="contentType">application/json</param>
</result>

排除值為 null 的屬性

<result type="json">
  <!--排除值為null的屬性-->
  <param name="excludeNullProperties">true</param>
</result>

只序列化指定的Action屬性

<result type="json">
    <!--只序列化Action內的list屬性-->
    <param name="root">list</param>
</result>

序列化包含的屬性(逗號分隔的正則表達式列表)
<result type="json">
    <!--序列化list屬性-->
    <param name="includeProperties">list.*</param>
</result>
<result type="json">
    <!--序列化array屬性,\[和\]匹配數組的[]括號,\d匹配數字,+表示一次或多次-->
    <param name="includeProperties">array\[\d+\]</param>
</result>

排除不需要被序列化的屬性(逗號分隔的正則表達式列表)
<result type="json">
     <!--排除list屬性-->
  <param name="excludeProperties"> list.* </param>
</result>

struts2對json的支持