JSON插件与json类型的Result

简介:

JSON插件提供了一种json类型的Result,一旦为某个Action指定了一个类型为jsonResult,则该Result无须映射到任何视图资源。因为JSON插件会负责将Action里的状态信息序列化成JSON格式的字符串,并将该字符串返回给客户端浏览器。

简单地说,JSON插件允许我们在客户端页面的JavaScript中异步调用Action,而且Action不再需要使用视图资源来显示该Action里的状态信息,而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式,就可以完成Ajax交互。

Struts 2解压缩目录的lib子目录下struts2-json-plugin-2.2.1.jar文件复制到Web应用的WEB-INF\lib目录下,即可为该Struts 2应用增加JSON插件。

接下来配置提供返回JSON字符串的Action,配置该Action与配置普通Action存在小小的区别,应该为该Action配置类型为jsonResult,而这个Result无须配置任何视图资源。

配置该Actionstruts.xml文件代码如下。

程序清单:codes\04\4.6\struts2json\WEB-INF\src\struts.xml

 
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5. <struts>  
  6.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  7.     <package name="example" extends="json-default">  
  8.         <action name="JSONExample" class="org.crazyit.app.action.JSONExample">  
  9.             <!-- 配置类型的json的Result -->  
  10.             <result type="json">  
  11.                 <!-- 为该Result指定参数 -->  
  12.                 <param name="noCache">true</param>  
  13.                 <param name="contentType">text/html</param>  
  14.             </result>  
  15.         </action>  
  16.         <action name="*">  
  17.             <result>/WEB-INF/content/{1}.jsp</result>  
  18.         </action>  
  19.     </package>  
  20. </struts>  

在上面配置文件中有两个值得注意的地方:

Ø  第一个地方是配置struts.i18n.encoding常量时,不再使用GBK编码,而是使用UTF-8编码,这是因为AjaxPOST请求都是以UTF-8的方式进行编码的。

Ø  第二个地方是配置包时,自己的包继承了json-default包,而不再继承默认的default包,这是因为只有在该包下才有json类型的Result

一旦我们将某个逻辑视图名配置成json类型,这将意味着该逻辑视图无须指定物理视图资源,因为JSON插件会将该Action序列化后发送给客户端。

正如上面的粗体字代码所示,配置json类型的Result时无须指定任何视图资源——JSON插件会将Action对象序列化成一个JSON格式的字符串,并将该字符串作为响应输出给请求者。

上面的粗体字代码中定义json类型的Result时,还指定了noCachecontentType两个参数,这都是json类型的Result的合法参数,json类型的Result可以接受如表4.1所示的常用参数。

4.1  json类型的Result允许指定的参数

    

    

    

   

excludeProperties

逗号隔开的多个属性名表达式

 

所有匹配其中任意一个属性名表达式的属性都不会被序列化到JSON字符串中

IncludeProperties

逗号隔开的多个属性名表达式

 

所有匹配其中任意一个属性名表达式的属性都会被序列化到JSON字符串中

root

OGNL表达式,确定Action内某个属性

 

设置该参数将不再把整个Action对象序列化成JSON字符串。而是只将该参数所指定的Action属性序列化成JSON字符串,返回给客户端

    

    

    

   

wrapPrefix

任意字符串

 

设置在系统生成的JSON结果字符串前添加固定的字符串前缀

wrapSuffix

任意字符串

 

设置在系统生成的JSON结果字符串后添加固定的字符串后缀

ignoreHierarchy

truefalse

true

默认情况下,JSON插件只序列化Action对象的本身的属性,不会理会它的父类的属性。将该属性设false,将会序列化从Object类开始、所有父类、直到该Action类中所包含的全部属性

enableGZIP

truefalse

false

设置是否对JSON响应启用gzip压缩。如果启用gzip压缩,需要客户端浏览器支持

noCache

truefalse

false

设置是否取消浏览器缓存。将该参数设为true,将意味着增加如下响应头:

Cache-Control: no-cache

Expires: 0

Pragma: No-cache

excludeNullProperties

truefalse

false

设置是否不序列化属性值为null的属性

contentType

合法的MIME类型

text/html

设置服务器响应的类型。默认是text/html,通常无须修改


 

本文转自 fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/897429 ,如需转载请自行联系原作者

相关文章
|
27天前
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
43 1
|
3月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
154 0
|
4月前
|
JSON 数据格式
SpringMVC-接收请求中的json数据及日期类型参数传递
SpringMVC-接收请求中的json数据及日期类型参数传递
51 0
|
3月前
|
JSON 关系型数据库 MySQL
这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
【1月更文挑战第17天】【1月更文挑战第84篇】这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
34 1
|
4月前
|
SQL JSON 关系型数据库
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
51 0
|
4月前
|
JSON 前端开发 JavaScript
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
|
5月前
|
JSON JavaScript 数据格式
jQuery将json性别数据int类型进行格式化渲染
jQuery将json性别数据int类型进行格式化渲染
26 0
|
5月前
|
JSON IDE 测试技术
软件测试|好用的pycharm插件推荐(二)—— JSON Parser
软件测试|好用的pycharm插件推荐(二)—— JSON Parser
64 0
|
6月前
|
JSON 数据格式
Gson转换json数据为HashMap时long类型变为double问题解决
今天再使用Gson处理json数据的时候碰到了一个问题 , 当我使用如下代码解析json数据的时候 , requestTime就变为了double类型
123 0
|
8月前
|
JSON 关系型数据库 MySQL
MybatisPlus处理Mysql的json类型
数据库(Mysql)中有一个type类型字段,数据类型为json,大概是这样的:[“张三”,“李四”,“王五”]的数据格式,需要将查询后这个json格式的数据映射到我们实体类的属性上
262 1