json-libのjsonConfig詳細使用
一、パッケージの自己含有を防止する JSON-LIBでは、変換するオブジェクトに自身のオブジェクトが含まれている場合、異常There is a cycle in the hierarchyが放出されます.
一部のフィールドのタイプは列挙タイプで、変換時に値を列挙クラスのvalueまたはlabelに設定できます.
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;
}
});