2016-10-27 17 views
0

私はジャクソンを使用してJava OffsetDateTimeにジャクソンObjectMapperはOffsetDateTimeをデシリアライズ - 非春

{ 
    "hour": 3, 
    "nano": 641000000, 
    "year": 2016, 
    "month": "OCTOBER", 
    "minute": 6, 
    "offset": { 
    "id": "Z", 
    "rules": { 
     "fixedOffset": true, 
     "transitions": [ 

     ], 
     "transitionRules": [ 

     ] 
    }, 
    "totalSeconds": 0 
    }, 
    "second": 13, 
    "dayOfWeek": "THURSDAY", 
    "dayOfYear": 301, 
    "dayOfMonth": 27, 
    "monthValue": 10 
} 

、次の形式でJSONオブジェクト(OffsetDateTime)をデシリアライズするにはどうすればよいです。

私はJSR jackson依存関係を含めて、objectTimeにJavaTimeModuleを登録しました。逆シリアル化しようとすると、JSR Jackson jarのInstantDeseralizerは、トークンとしての開始オブジェクトではなく、浮動小数点数、文字列、埋め込みオブジェクトまたは浮動小数点を値(スロー例外)として期待しているため動作しません。

答えて

1

あなたが近づいている方法は正しくありません。 Java時間モジュールを使用するポイントは、ISO標準であるjson文字列を解析することでした。

あなたが持っている文字列は、java timeモジュールを使用しないときに得られるjsonです。これは基本的にすべてのメンバーフィールドとゲッターをストリング化することです。

すべてのJavaタイムクラスは不変であるため、ジャックソンは廃止されません。

非標準のjsonを使い続けるためには、Java時間モジュールが必要でもありません。 カスタムDeserailizerを作成し、LocalDate、LocalTime、ZoneOffsetをjsonフィールドから再作成し、OffsetDateTimeを作成するには、OffsetDateTime.of(LocalDate、LocalTime、ZoneOffset)を使用する必要があります。

+0

私は、モジュールが私のためにやることを魔法のように期待していました。あるいは、ジャクソンが母親であり、すべてが組み込み機構を持っていて、私が行方不明だったと仮定しました。 :) – Bharath

関連する問題