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 ,如需转载请自行联系原作者

相关文章
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
310 1
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
395 0
|
4月前
|
JSON IDE Java
鸿蒙开发:json转对象插件回来了
首先,我重新编译了插件,进行了上传,大家可以下载最新的安装包进行体验了,还是和以前一样,提供了在线版和IDE插件版,两个选择,最新的版本,除了升级了版本,兼容了最新的DevEco Studio ,还做了一层优化,就是针对嵌套对象和属性的生成,使用方式呢,一年前的文章中有过详细的概述,这里呢也简单介绍一下。
153 4
鸿蒙开发:json转对象插件回来了
|
12月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
2816 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
11月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
284 4
|
JSON 人工智能 编译器
Go json 能否解码到一个 interface 类型的值
Go json 能否解码到一个 interface 类型的值
91 1
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 JSON DataWorks
DataWorks产品使用合集之DataWorks将 MongoDB 中的数组类型写入到 DataWorks 的单个字段时,表示为字符串格式而非 JSON 格式如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
172 3
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
1189 0
|
存储 JSON 关系型数据库
MySQL JSON 类型:功能与应用
MySQL JSON 类型:功能与应用

热门文章

最新文章