そして、システムの変換JavaBeanのJSONタイムスタンプフィールドメソッドを処理するとき

プロジェクトと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の、設定)

 

おすすめ

転載: www.cnblogs.com/huangzhang/p/10937602.html