json-libのjsonConfig詳細使用


一、パッケージの自己含有を防止する        JSON-LIBでは、変換するオブジェクトに自身のオブジェクトが含まれている場合、異常There is a cycle in the hierarchyが放出されます.
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
二、変換するフィールドをカスタマイズする
config.setJsonPropertyFilter(new PropertyFilter() {

			@Override
			public boolean apply(Object source, String name, Object value) {
				// TODO Auto-generated method stub
				if (name.equals("id") || name.equals("serialNumber")
						|| name.equals("productName")
						|| name.equals("emailAddress")
						|| name.equals("applySatus") || name.equals("remark")
						|| name.equals("applyStatusLabel")
						|| name.equals("applyDate")) {
					//        
					return false;
				}
				return true;
			}
		});
三、遅延ロードで異常が発生した問題を解決する(net.sf.json.JSONException:java.lang.reflect.InvocationTargetException)
JsonConfig config = new JsonConfig();
//              
config.setExcludes(new String[] { "handler", "hibernateLazyInitializer" });
四、データベース照会結果におけるDate変換の問題を解決する(net.sf.json.JSONException:java.lang.reflect.InvocationTargetException)
config.registerJsonValueProcessor(java.util.Date.class,
				new JsonValueProcessor() {
					@Override
					public Object processArrayValue(Object obj,
							JsonConfig jsonconfig) {
						return null;
					}

					@Override
					public Object processObjectValue(String key, Object value,
							JsonConfig jsonConfig) {
						if (value == null)
							return "";
						//   :                        
						if (value instanceof java.sql.Date) {
							String str = DateUtil.dateToStr((java.util.Date) value,
									"yyyy-MM-dd");//         ,    SimpleDateFormat  ,  
							return str;
						} else if (value instanceof java.sql.Timestamp
								|| value instanceof java.util.Date) {
							String str = DateUtil.dateToStr((java.util.Date) value,
									"yyyy-MM-dd HH:mm:ss");
							return str;
						}
						return value.toString();
					}
				});
五、結果変換
一部のフィールドのタイプは列挙タイプで、変換時に値を列挙クラスのvalueまたはlabelに設定できます.
config.registerJsonValueProcessor(ApproveStateType.class,
				new JsonValueProcessor() {

					@Override
					public Object processObjectValue(String key, Object value,
							JsonConfig jsonConfig) {
						// TODO Auto-generated method stub
						if (value instanceof ApproveStateType) {
							ApproveStateType tmpValue = (ApproveStateType) value;
							return tmpValue.getValue();
						}
						return value.toString();
					}

					@Override
					public Object processArrayValue(Object arg0, JsonConfig arg1) {
						// TODO Auto-generated method stub
						return null;
					}
				});