Json系列之四 揭开JsonConfig的神秘面纱 java to json

//揭开JsonConfig的神秘面纱,for bean to json
		 JsonConfig jsonConfig = new JsonConfig();
		 //忽略掉bean中含后某个注解的field,不转换成json,可以多次增加不同注解
		 //jsonConfig.addIgnoreFieldAnnotation(Person.class);//一定是注解的类,我这里没有例子,大家可以自己做
		 //同上
		 //jsonConfig.addIgnoreFieldAnnotation("person");
		 //把某种类型的class,转换成自定义的结果
		 jsonConfig.registerDefaultValueProcessor(Address.class, new DefaultValueProcessor() {

			@Override
			public Object getDefaultValue(Class type) {

				return null;
			}
		 });
		 //返回成自己设定的jsonObject
//		 jsonConfig.registerJsonBeanProcessor(Person.class, new JsonBeanProcessor() {
//
//			@Override
//			public JSONObject processBean(Object bean, JsonConfig jsonConfig) {
//
//				return null;
//			}
//		});
		//jsonConfig.registerPropertyNameProcessor(target, propertyNameProcessor);
		//被registerJsonPropertyNameProcessor取代
		//在到json层的时候的转换,比上面javapropertyName靠后执行
		 jsonConfig.registerJsonPropertyNameProcessor(Person.class, new PropertyNameProcessor() {

			@Override
			public String processPropertyName(Class beanClass, String name) {
				if(name.equals("name")){
					return "nameJson";
				}
				return name;
			}
		 });
		 //在json层转换的
		 jsonConfig.registerJsonValueProcessor(String.class, new JsonValueProcessor() {

			@Override
			public Object processObjectValue(String key, Object value,
					JsonConfig jsonConfig) {
				if(key.equals("emptyStr")){

					return "asdfa";
				}
				return value;
			}

			@Override
			public Object processArrayValue(Object value, JsonConfig jsonConfig) {
				// TODO Auto-generated method stub
				return null;
			}
		 });
		 jsonConfig.registerJsonValueProcessor("nullStr", new JsonValueProcessor() {

			@Override
			public Object processObjectValue(String key, Object value,
					JsonConfig jsonConfig) {

				return "nullStr2";
			}

			@Override
			public Object processArrayValue(Object value, JsonConfig jsonConfig) {
				return null;
			}
		});
		//jsonConfig.registerJsonValueProcessor(beanClass, propertyType, jsonValueProcessor);//更加细化
		//jsonConfig.registerJsonValueProcessor(beanClass, key, jsonValueProcessor);//更加细化

		//剔除哪个属性
		jsonConfig.registerPropertyExclusion(Person.class, "sameTest");
		//剔除哪些属性
		//jsonConfig.registerPropertyExclusions(target, properties);
		//是否允许空
		jsonConfig.setAllowNonStringKeys(true);
		//内部如果有嵌套引用时候,如何处理 DEFAULT_CYCLE_DETECTION_STRATEGY = CycleDetectionStrategy.STRICT;
		//jsonConfig.setCycleDetectionStrategy(cycleDetectionStrategy);

		//可以实现吧A class 转换成B Class
//		jsonConfig.setDefaultValueProcessorMatcher(new DefaultValueProcessorMatcher() {
//
//			@Override
//			public Object getMatch(Class target, Set set) {
//				//return B.class
//				return null;
//			}
//		});
		//忽略掉哪些属性
		//jsonConfig.setExcludes(excludes);
		//jsonConfig.setIgnoreDefaultExcludes(ignoreDefaultExcludes);
		//jsonConfig.setIgnoreJPATransient(ignoreJPATransient);
		//jsonConfig.setIgnorePublicFields(ignorePublicFields);
		//jsonConfig.setIgnoreTransientFields(ignoreTransientFields);

		//jsonConfig.setJsonValueProcessorMatcher(jsonValueProcessorMatcher);
		//jsonConfig.setJsonPropertyNameProcessorMatcher(propertyNameProcessorMatcher);
		jsonConfig.setJsonPropertyFilter(new PropertyFilter() {

			@Override
			public boolean apply(Object source, String name, Object value) {
				// TODO Auto-generated method stub
				return false;
			}
		});
		//jsonConfig.setJsonBeanProcessorMatcher(jsonBeanProcessorMatcher);
		//jsonConfig.setJavascriptCompliant(javascriptCompliant);

		System.out.println(format(JSONObject.fromObject(p, jsonConfig).toString()));

时间: 2024-11-07 03:02:29

Json系列之四 揭开JsonConfig的神秘面纱 java to json的相关文章

ASP.NET 运行时详解 揭开请求过程神秘面纱

对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就一步步揭开请求管道神秘面纱. 上篇回顾 在介绍本篇内容之前,让我们先回顾下上一篇<ASP.NET运行时详解 集成模式和经典模式>的主要内容.在上一篇随笔中,我们提到ASP.NET运行时通过Application的InitInternal方法初始化运行管道.ASP.NET运行时提供了两种初始化管道模

【安全健行】(4):揭开shellcode的神秘面纱

2015/5/18 16:20:18 前面我们介绍了shellcode使用的基本策略,包括基本的shellcode.反向连接的shellcode以及查找套接字的shellcode.在宏观上了解了shellcode之后,今天我们来深入一步,看看shellcode到底是什么.也许大家和我一样,从接触安全领域就听说shellcode,也模糊地知道shellcode基本就是那个攻击载荷,但是shellcode到底长什么样,却一直遮遮掩掩,难睹真容.趁今天这个机会,我们一起来揭开shellcode的神秘面

揭开RecyclerView的神秘面纱(二):处理RecyclerView的点击事件

前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了RecyclerView的基本使用方法,不同的布局管理器而造成的多样化展示方式,展示了数据之后,一般都会与用户进行交互,因此我们需要处理用户的点击事件.在ListView和GridView提供了onItemClickListener这个监听器,然而我们查找RecyclerView的API却没有类似的监听器,因此我们需要自己手动处理它的点击事件. 以下提供两种方法来实现处理Recycler

iOS UIView动画实践(一):揭开Animation的神秘面纱

前言 在一个看脸的社会中,不论什么事物,长得好看总是能多吸引一些目光.App同样不例外,一款面相不错的App就算功能已经被轮子千百遍,依然会有人买账,理由就是看得顺眼,于是平面设计人员越来越被重视.白驹过隙,斗转星移,人们已然不满足于静态的美感,于是动态的用户体验应运而生,平面设计人员捉襟见肘,是我们程序员出马的时候了. 这篇文章是UIView Animation的第一篇,从极简的概念开始,为大家揭开Animation的神秘面纱.我们以一个登录界面为例.美丽的太阳,婀娜的云,还有几个小山包,中间

揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用

前言 在Android开发中,我们经常与ListView.GridView打交道,它们为数据提供了列表和视图的展示方式,方便用户的操作.然而,随着Android的不断发展,单一的listview逐渐满足不了需求多变的项目了,因此,谷歌在support v7中,加入了新的控件--RecyclerView,该控件整合了ListView.GridView的特点,而且最大的优点是可以很方便实现瀑布流效果,因此RecyclerView受到越来越多的开发者重视.所以,学习RecyclerView的使用也是很

SparkSQL大数据实战:揭开Join的神秘面纱

本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介绍 Join是数据库查询永远绕不开的话题,传统查询SQL技术总体可以分为简单操作(过滤操作-where.排序操作-limit等),聚合操作-groupby以及Join操作等.其中Join操作是最复杂.代价最大的操作类型,也是OLAP场景中使用相对较多的操作.因此很有必要对其进行深入研究. 另外,从业

了解黑客的关键工具---揭开Shellcode的神秘面纱

ref:  http://zhaisj.blog.51cto.com/219066/61428/ 对于初期接触网络安全的人来说,Shellcode是很神秘的东西,对于网络攻击过程中的嗅探信息.漏洞剖析都是可以理解的,但真正利用漏洞入侵时,通过把一段二进制码送入后并执行,就可以获得目标机器的控制权,之后的事情是属于爱好者学习技术,还是黑客的行为,就看攻击者的一念之差了.Shellcode就好象神秘的武器,安全防护变得如此不堪一击.Shellcode究竟是什么样的程序?是什么特殊代码?如何才能学会编

揭开推荐系统的神秘面纱

开篇 先推荐几篇关于推荐的文章,个人感觉对于入门很有实际意义,是IBM的工程师写的,如下: 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探 探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤 探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类 推荐系统是什么 推荐,就是把你可能喜欢的商品,推到你的面前.构建一个推荐系统,就是构建如何把商品推到你面前的过程. 经常听到人说,推荐就是算法,在接触推荐系统之前,我也以为推荐就是算法,一说到算法,可能就以

揭开正则表达式的神秘面纱

[原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征.比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征.   正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址.(2)用来