json-lib之jsonConfig详细使用

一、防止包自含
        在JSON-LIB中,要转换的对象包含自身对象时,会抛出异常There is a cycle in the hierarchy,解决办法:

[java]  view plain  copy
  1. jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  
二、自定义要被转换的字段

[java]  view plain  copy
  1. config.setJsonPropertyFilter(new PropertyFilter() {  
  2.   
  3.             @Override  
  4.             public boolean apply(Object source, String name, Object value) {  
  5.                 // TODO Auto-generated method stub  
  6.                 if (name.equals("id") || name.equals("serialNumber")  
  7.                         || name.equals("productName")  
  8.                         || name.equals("emailAddress")  
  9.                         || name.equals("applySatus") || name.equals("remark")  
  10.                         || name.equals("applyStatusLabel")  
  11.                         || name.equals("applyDate")) {  
[java]  view plain  copy
  1. <span style="white-space:pre">                    </span>//这些字段会被转换  
  2.                     return false;  
  3.                 }  
  4.                 return true;  
  5.             }  
  6.         });  
三、解决延迟加载产生异常的问题(net.sf.json.JSONException: java.lang.reflect.InvocationTargetException)

[java]  view plain  copy
  1. JsonConfig config = new JsonConfig();  
  2. // 解决延迟加载产生异常的问题  
  3. config.setExcludes(new String[] { "handler""hibernateLazyInitializer" });  
四、解决数据库查询结果中,Date转换的问题(net.sf.json.JSONException: java.lang.reflect.InvocationTargetException)

[java]  view plain  copy
  1. config.registerJsonValueProcessor(java.util.Date.class,  
  2.                 new JsonValueProcessor() {  
  3.                     @Override  
  4.                     public Object processArrayValue(Object obj,  
  5.                             JsonConfig jsonconfig) {  
  6.                         return null;  
  7.                     }  
  8.   
  9.                     @Override  
  10.                     public Object processObjectValue(String key, Object value,  
  11.                             JsonConfig jsonConfig) {  
  12.                         if (value == null)  
  13.                             return "";  
  14.                         // 注意:在判断几个父子级类型时要先判断子类型再判断父类型  
  15.                         if (value instanceof java.sql.Date) {  
  16.                             String str = DateUtil.dateToStr((java.util.Date) value,  
  17.                                     "yyyy-MM-dd");//这里是我封装的工具,可以使用SimpleDateFormat代替,一样  
  18.                             return str;  
  19.                         } else if (value instanceof java.sql.Timestamp  
  20.                                 || value instanceof java.util.Date) {  
  21.                             String str = DateUtil.dateToStr((java.util.Date) value,  
  22.                                     "yyyy-MM-dd HH:mm:ss");  
  23.                             return str;  
  24.                         }  
  25.                         return value.toString();  
  26.                     }  
  27.                 });  
五、结果转换

有些字段的类型是枚举类型,可以在转换的时候将值设置为枚举类的value或者是label

[java]  view plain  copy
  1. config.registerJsonValueProcessor(ApproveStateType.class,  
  2.                 new JsonValueProcessor() {  
  3.   
  4.                     @Override  
  5.                     public Object processObjectValue(String key, Object value,  
  6.                             JsonConfig jsonConfig) {  
  7.                         // TODO Auto-generated method stub  
  8.                         if (value instanceof ApproveStateType) {  
  9.                             ApproveStateType tmpValue = (ApproveStateType) value;  
  10.                             return tmpValue.getValue();  
  11.                         }  
  12.                         return value.toString();  
  13.                     }  
  14.   
  15.                     @Override  
  16.                     public Object processArrayValue(Object arg0, JsonConfig arg1) {  
  17.                         // TODO Auto-generated method stub  
  18.                         return null;  
  19.                     }  
  20.                 }); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值