プロジェクトとJSONのシステム変換時間でのJavaBean、Beanがフィールドのタイムスタンプの種類を持っているので、我々はそれに対処する必要があります。
2つのコンバータ、DateJsonValueProcessorとTimestampMorpherを作成します。
DateJsonValueProcessor:JSONターンJavaBeanのための
輸入net.sf.ezmorph.MorphException。 輸入net.sf.ezmorph.object.AbstractObjectMorpher; インポートをjava.sql.Timestamp; 輸入java.text.ParseException。 輸入java.text.SimpleDateFormatの。 / ** *のIntelliJ IDEAを使用して作成。 *ユーザー:huangzhangの *日:19-05-28 *時間:1時02下午 *内容:用于JSON转换成のJavaBean * / パブリッククラスTimestampMorpher拡張AbstractObjectMorpher { / ** *日期字符串格式 * / プライベート文字列[]フォーマット; 公共TimestampMorpher(文字列[]フォーマット){ this.formatsの=フォーマット。 } 戻りヌル。 パブリックオブジェクトモーフ(Object値){ IF(値== NULL){ {試します } IF(Timestamp.class.isAssignableFrom(value.getClass())){ リターン(タイムスタンプ)の値。 } (サポート(value.getClass())!){もし 新しいMorphExceptionスロー(value.getClassを()+ "是不支持的类型"); } 文字列strValueに=(文字列)値。 SimpleDateFormat dateParser = NULL; 以下のために(INT i = 0; I <formats.length; iは++){ IF(ヌル== dateParser){ dateParserは=新しいてSimpleDateFormat(フォーマット[I])。 } 他{ dateParser.applyPattern(フォーマット[I])。 } 返す新しいタイムスタンプ(dateParser.parse(strValue.toLowerCase())getTime()); } キャッチ(はParseException電子){ //e.printStackTrace()。 } } はnullを返します。 } @Override publicクラスmorphsTo(){ Timestamp.classを返します。 } パブリックブール支持体(クラスclazz){ String.class.isAssignableFrom(clazz)を返します。 } }
DateJsonValueProcessor:JavaBeanはJSONを回すために
輸入net.sf.json.JsonConfig; 輸入net.sf.json.processors.JsonValueProcessor。 輸入java.text.DateFormatの。 輸入java.text.SimpleDateFormatの。 輸入java.util.Date; / ** *のIntelliJ IDEAを使用して作成。 *ユーザー:huangzhangの *日:19-05-28 *時間:下午1:02 * DESC:用于のJavaBean转JSON * / パブリッククラスDateJsonValueProcessorはJsonValueProcessorを実装{ パブリック静的最終列Default_DATE_PATTERN = "YYYY-MM-DD"。 プライベートDateFormatのDATEFORMAT。 公共DateJsonValueProcessor(文字列datePattern){ {試みる DATEFORMAT =新しいてSimpleDateFormat(datePattern)を、 }キャッチ(例外e){ DATEFORMAT =新しいてSimpleDateFormat(Default_DATE_PATTERN)。 } } パブリックオブジェクトprocessArrayValue(Object値、JsonConfig jsonConfig){ 復帰処理(値)。 } パブリックオブジェクトprocessObjectValue(文字列キー、オブジェクトの値、JsonConfig jsonConfig){ 復帰処理(値)。 } プライベートオブジェクト処理(オブジェクト値){ dateFormat.format((日)値)を返します。 } }
コード例:
// JavaBeanの转JSON JsonConfigの設定=新しいJsonConfig(); config.registerJsonValueProcessor(Timestamp.class、新しいDateJsonValueProcessor( "YYYY-MM-DD HH:MM:SS")); JSONObject jsonObject = JSONObject.fromObject(JavaBeanの、設定) // JSON转JavaBeanの 文字列[] = {フォーマット"YYYY-MM-DD HH:MM:SS"、 "YYYY-MM-DD"}。 JSONUtils.getMorpherRegistry()registerMorpher(新しいTimestampMorpher(形式))。 JSONObject jsonObject = JSONObject.fromObject(message.getWparam())。 branchTpm =(BranchTpm)JSONObject.toBean(jsonObject、JavaBean.class)。
しかし、これは十分ではありません、私も例外「階層内のサイクルがある」が登場、JSONObject.fromObject時間の使用で間違いを報告しました。
死のサイクルがあることを意味し、つまり、モデル間の循環包含関係があります。
JavaBeanのJSONのターンは、いくつかの構成の追加を必要とする場合には、config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT)。
例:
JsonConfig設定= 新しいJsonConfig(); config.registerJsonValueProcessor(タイムスタンプ。クラス、新しい DateJsonValueProcessor( "YYYY-MM-DD HH:MM:SS" )); config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT)。 JSONObject jsonObject = JSONObject.fromObject(JavaBeanの、設定)