Struts 2 Jsonplugin詳細


本論文の転送先:http://www.blogjava.net/fuhoujun/archive/2008/10/04/232324.html
Apacheが提供するプラグインパッケージは、アクション中のデータをJSONでパッケージして返すことができます.
これはaction全体の変数をJSONデータに変換します.これを使うなら、アクションは以下の点に従わなければならない.
  • 戻るページタイプのうち、「content-type」は、「aplication/json」でなければなりません.
  • JSONの内容はフォーマットの要求に適合していなければなりません.
  • Actにおいてfieldはpublicのset方法が必要である(set方法がないとJSONデータにfieldを追加しないので、検証が必要である).
  • サポートタイプは、基本タイプ(int、long...String)、Date、List、Map、Primitive Arays、その他のクラス、オブジェクト配列です.
  • JSONのいずれかのObjectはlistまたはmapにカプセル化され、データはロードLongにカプセル化され、含まれるデータであればDoubleにカプセル化され、配列はList.
  • にカプセル化される.
    以下、JSONのデータフォーマットを示します.
    {
        "doubleValue": 10.10,
        "nestedBean": { "name": "Mr Bean" },
        "list": ["A", 10, 20.20, { "firstName": "El Zorro" }],
        "array": [10, 20]
    }
    
     
    このプラグインは以下のコメントをサポートしています.
     
    コメント名
    概要
    標準値
    序文化
    反プロローグ
    name
    JSONの中のnameを設定します.
    empty
    yes
    no
    serialize
    serializationでは
    true
    yes
    no
    deserialize
    deserializationでは
    true
    no
    yes
    フォーマット
    Dateフィールドの書式設定
    「yyy-M-dd'T'HH:mm:ss」
    yes
    yes
     
    JSONにフィルドを置くことを指摘する構成によって表示することができますが、その中には自分の検証ルールが研究されます.
    <!-- Result fragment -->
    <result type="json">
        <param name="excludeProperties">
            login.password,
            studentList.*".sin
        </param>
    </result>
    
    <!-- Interceptor fragment -->
    <interceptor-ref name="json">
        <param name="enableSMD">true</param>
        <param name="excludeProperties">
            login.password,
            studentList.*".sin
        </param>
    </interceptor-ref>
     
    ルートオブジェクト
    <result type="json">
        <param name="root">
            person.job
        </param>
    </result>
     
    親オブジェクトを操作するブロック構成も使用できます.
    <interceptor-ref name="json">
        <param name="root">bean1.bean2</param>
    </interceptor-ref>
     
    JSONデータをコメントでカプセル化する
    wrapWithCommentsがtrue(デフォルト値はfalse)に設定されていると、生成されたJSONデータはこのようになります.
    /* {
        "doubleVal": 10.10,
        "nestedBean": { "name": "Mr Bean" },
        "list": ["A", 10, 20.20, { "firstName": "El Zorro" }],
        "array": [10, 20]
    } */
     
    このようにすれば、jsの中に潜在的なリスクを回避できます.使う時に必要なのは、Var reponseObject=eval("("+"+data.substring(data.indexOf)+2,data.lastIndexOf("*")+")),"),")),"),"),").
     
    親類
    「root」オブジェクト中の親類のfieldはJSONデータにデフォルトで保存されません.そうしたくないなら、配置時にInoreHirarchyをfalseに指定する必要があります.
    <result type="json">
        <param name="ignoreHierarchy">false</param>
    </result>
     
    列挙の種類
    エニュメレーションの種類をデフォルトで処理すると、JSONデータのnameはエニュメレーションのvalueに等しく、valueはエニュメレーションのnameに等しい.
    public enum AnEnum {
        ValueA,
        ValueB
    }
     
    JSON: 「myEum」:「ValueA」
     
    エニュメレート・タイプを扱う場合、xmlにenumAsBeanを配置すると、ビーンとして扱われ、JSONデータには特別な属性があります.nameの値はname()です.このリストのすべての属性は処理されます.
    public enum AnEnum {
        ValueA("A"),
        ValueB("B");
    
        private String val;
    
        public AnEnum(val) {
            this.val = val;
        }
    
        public getVal() {
           return val;
        }
    }
     
    JSON: myEnum:{_name}:“ValueA”、“val”:“A”}
     
    Xmlの設定:
    <result type="json">
        <param name="enumAsBean">true</param>
    </result>