exclude properties in json result

2299 ワード

struts-json-pluginを参照.XX.xx.jar.その中のjson-pluginを導入します.xml、userのpackageはjson-defaultを継承します.json interceptorを導入し、以下のようにします.

 <interceptors>
			<interceptor-stack name="ecsStack">
				<interceptor-ref name="defaultStack">
					<param name="exception.logEnabled">true</param>
					<param name="exception.logLevel">ERROR</param>
				</interceptor-ref>
				<interceptor-ref name="json"><param name="contentType">application/json;charset=utf-8</param></interceptor-ref>
			</interceptor-stack>
        </interceptors>

JSOnInterceptorのソースコードを見てみると、noCacheとexcludeNull Propertiesのプロパティがありますが、ここではこの2つのパラメータを設定するのは無効です.
json resultにこの2つのパラメータを設定する場合は、json result typeで設定します.

<result-types>
    		<result-type name="json" class="org.apache.struts2.json.JSONResult">
    			<param name="noCache">true</param>
    			<param name="excludeNullProperties">true</param>
    		</result-type>
    	</result-types>

json resultでデータをシーケンス化する場合、シーケンス化を必要としないデータがある場合があります.resultで構成できます.

<result name="browse" type="json"><param name="excludeProperties">seriesSet</param><param name="root">category</param></result>

<result name="search_ajax" type="json"><param name="excludeProperties">\[\d+\]\.seriesSet</param><param name="root">categoryList</param></result>

ここでseriesSetはcategoryオブジェクトの1つのSet属性であり、categoryList全体をフィルタするseriesSet構成に注意してください.
補足:最後のexcludePropertiesの設定については、hibernateでone-to-many lazy loading=trueを構成していましたが、consoleで印刷されたsqlはlazy loadではないことを示しており、フロントでも「怠惰ロード」データが見られ、その後コードを追跡し、DAO層でクエリーする際、「怠惰データ」はクエリーされませんでしたが、jsonでデータをシーケンス化する際、それらの「怠惰データ」もシーケンス化されます.だからconsoleの中で大量のsqlを走った.フロントでこれらのデータが不要な場合は、excludePropertiesを設定し、パフォーマンスを向上させる必要があります.
参考資料:http://struts.apache.org/release/2.1.x/docs/json-plugin.html