文档章节

json的一些属性用法

z
 zdatbit
发布于 2016/07/13 12:27
字数 1073
阅读 117
收藏 0

首先看下面的配置文件中的两种写法:当然Action所在的包必须继承json-default:

<package name="default" extends ="json-default" >

第一种:

<action name="upload_*" class="uploadAction" method="{1}">  
    <result type="json">  
        <param name="root">fileName</param>  
    </result>  
</action>  

 

第二种:

<action name="uploadJson" class="uploadJsonAction" method="upload">  
     <result type="json" name="success"></result>           
</action> 


当然,两种方式都能达到相应的效果,但是开发中我们建议使用第一种

 

  • 第一种指定了struts2需要帮你转换成的json的Action中bean的属性:filename;也就是struts2只会调用getFileName()这一个get方法,忽略其他bean属性的的get*方法,自然节省了不少资源。
  • 第二种没有指定需要转换成json的属性,只要Action中有get*方法的,strut2都会帮你转换,你节省的代码换来了程序不必要的开支。

 

但是,strut2的开发者显然做的比较得当,下面的注解方式可以帮你改进不少你的代码,当然个人觉得还是加上root方便、简单:

  • @JSON(serialize=false) :如果你不想让某个属性被json序列化,只要在其get*方法上面加上以下注解即可;
  • @JSON(name="newName"):返回的json数据中名称是指定的新名称
  • @JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化输出、解析日期表单域的格式。
  • @JSON(deserialize=true)设置是否反序列化该属性

下面看看其他几种配置的写法:

 

第三种:excludeNullProperties 参数:表示是否去掉空值, 默认值是false,如果设置为true会自动将为空的值过滤,只输出不为空的值。

    <result type="json">     
       <param name="excludeNullProperties">true</param>     
    </result>  

第四种: ignoreHierarchy 参数:表示是否忽略等级,也就是继承关系,比如:TestAction继承于BaseAction,那么TestAction中返回的json字符串默认是不会包含父类BaseAction的        属性值,ignoreHierarchy值默认为true,设置为false后会将父类和子类的属性一起返回。

<result type="json">     
    <param name="ignoreHierarchy">false</param>     
</result>  

 


第五种: includeProperties 参数:输出结果中需要包含的属性值(如果属性是对象的引用,若要json化引用的所有属性,则使用person.*),这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。

<result type="json">     
    <param name="includeProperties">person.*, person\.name</param>     
</result> 


第六种:excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,

<result type="json">     
    <param name="excludeProperties ">person.*, person\.name</param>     
</result>  


下面讲讲几种特殊的情况:

action 代码:

public class TestingAction extends ActionSupport {  
  
    private static final long serialVersionUID = 1L;  
    private static Log log = LogFactory.getLog(TestingAction.class);  
      
    private String resultStr = "success";//判断自测是否成功  
      
    private Integer testHeadId;// 试卷id  
    private String testLineId;// 试题id  
    private String userId;// 登录用户的id  
    private String testResult;// 测试结果 google gson拼凑的结果集  
    private TestLine testLine;//该道题目的相关信息  
    public List<ITestLine> testLines;//android端返回的json 

Bean:

public class TestLine   implements  
        java.io.Serializable {  
  
    // Fields  
  
    private String testLineId;  
    private TestHead testHead;  
    private Integer type;  
    private Integer sortIndex;  
    private Integer score;  
    private String tigan;  
    private String tizhi;  
    private String jiexi;  
    private String daan;  
    private Timestamp lastUpdateTime;  
    private String lastUpdateBy; 

 


上面大家看到,action中有一个对象的引用testLine;而testLine实体中又包含另一个对象TestHead的引用;其他的我就不说了,如果你也碰到这种情况,实体嵌套,那么使用struts2的json序列化时,默认会帮你序列化这个bean(testLine)中所有的属性,属性中如果涉及其他实体引用时,会继续帮你序列化该引用(TestHead)的属性值,就这样,你有多少层的嵌套,struts2就会帮你序列化多少层,这是你想要的结果吗?

 

处理这种问题的方法是:我们只需要告诉struts2我需要序列化那些属性:我们拿到经过Hibernate处理的之后的结果oldTestLine之后,需要重新创建我们需要序列化的对象:

TestLine testLine = new TestLine();

然后将需要的字段set值即可;

testLine .set(oldTestLine.get*);

 

处理需要序列化的集合(list、 map)问题(List<ITestLine> testLines)也是同解;

 

至于比较不错的json架包,个人推荐google gson。

 

 

推荐篇使用struts2返回各种类型的文章:http://www.open-open.com/lib/view/open1325518231062.html

 

本文转载自:http://blog.csdn.net/sunshine_bean/article/details/8287812

上一篇: hibernate fetch属性
下一篇: 递归打包下载
z
粉丝 3
博文 52
码字总数 7610
作品 0
海淀
私信 提问
Jackson 框架的高阶应用

Jackson 框架的高阶应用 刘万振 2017 年 11 月 15 日发布 Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社 区相对比较活跃,更新速度也比较快, ...

刘万振
2017/11/15
0
0
fastjson @JSONField

1.作用在FIELD(成员变量上) 注意:1、若属性是私有的,必须有set*方法。否则无法反序列化。 package com.zhujie; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.an...

诗和_远方
2018/08/24
0
0
『简书API:Golang 处理 json 用法讲解(4):视频版』

大家好,我是谢伟,是一名程序员。 简书API:Jianshu-go 历史文章: 1.『简书API : jianshu 基于 golang (1)』 2.『简书API:jianshu 基于golang -- 用法介绍 (2)』 3. 『简书API:Goque...

谢小路
2018/04/15
0
0
你不知道的JSON.stringify()妙用

1 语法 一般用法: 2 扩展用法 2.1 replacer replacer可以是或者是。 将isDead属性的值翻译成0或1,0对应false,1对应true 将isDead属性删除,如果replacer的返回值是,那么该属性会被删除。 ...

香吉士
2017/09/19
0
0
ECMAScript5 用法总结

浏览器支持 现在虽然已经出了ES6的规范,但是各大浏览器兼容性还有待提高。所以现在我们平时写的js代码还是多以ES5为规范。时至今日,除了一些较低版本的浏览器,各大主流浏览器基本都实现了...

bothyan
2016/11/03
21
1

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
29分钟前
8
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
44分钟前
7
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
439
9
玩转 Springboot 2 之热部署(DevTools)

Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序。在IDE中工作时,这可能是一个有用的功能...

桌前明月
今天
6
0
CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部