2017-04-13 5 views
1

私は既存のすべてのリポジトリをJoda TimeからJava 8に変換する作業を任されています。道。最初はDynamoDBがJava 8を本質的にサポートしていないので、Webからの助けを借りてZonedDateTime用のカスタムコンバータを作った。結果は次のとおりです。既存のGradle Libsの依存関係をZonedDateTimeにマージし、ジャクソン2.8.5とDynamoDBをSpringプロジェクトで更新する

static public class ZonedDateTimeConverter implements DynamoDBTypeConverter<String, ZonedDateTime> { 

    @Override 
    public String convert(final ZonedDateTime time) { 
     return time.toString(); 
    } 

    @Override 
    public ZonedDateTime unconvert(final String stringValue) { 
     return ZonedDateTime.parse(stringValue); 
    } 
} 

これは、ZonedDateTimeからStringへのマーシャルとDynamoDBへの戻りを処理します。しかし、私の最後の問題は、ZonedDateTimeからSpring/Jackson依存関係注入のためのStringへのマーシャリングである(私は信じている。

今私はjackson-datatype-jsr310hereが必要なことを行うには、Stackoverflowによると。しかし、そのページでそれは私がZonedDateTimeたちはジャクソン2.5.0 jackson: 'com.fasterxml.jackson.core:jackson-databind:2.5.0',を使用しているので、それはちょうどそれを更新する必要が理にかなっていることを私が見ることができるlibs.gradleで今Jackson 2.8.5

でマーシャリングできるようにする必要があり、すべての言いましたか?

だから私は今、jackson: 'com.fasterxml.jackson.core:jackson-databind:2.8.5',を言って、私はbuild.gradleファイルのコンパイルセクションにlibs.jacksonを追加しましたlibs.gradleを更新:compile(libs.jackson)

しかし構築するとき、私はまだcom.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.time.ZonedDateTime: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)を受けます。

私もext.libs定義にジャクソンコアとジャクソンのデータバインドを追加しようとしました:

jacksonCore: 'com.fasterxml.jackson.core:jackson-core:2.8.5', 
    jacksonBind: 'com.fasterxml.jackson.core:jackson-databind:2.8.5', 

build.gradle

libs.jacksonCore, 
    libs.jacksonBind 

まだサイコロ。何が起きているのか?

+0

ジャージーとジャクソンを使用していると仮定します。フィールドのコンストラクタに "@JsonCreate"と "@JsonProperty"を付けるか、gettersとsetterを使ってデフォルトのコンストラクタを実装してください。 –

+0

@RamandeepNanda注釈は必要ありません。新しいバージョンのJacksonは、新しいZonedDateTimeやLocalDateTimeなどのJava 8要素をネイティブにサポートする必要があります。例えばhttps://github.com/FasterXML/jackson-datatype-jsr310/blob/master/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/ZonedDateTimeSerializer.javaに組み込まれています。 – anon58192932

+1

ライブラリを更新したときに、アノテーションのインポートをcom.fasterxmlに更新しましたか?あなたがgradleを使用している場合は、ツリーを表示するためにアプリケーションの依存関係を変更することができます。 –

答えて

1

私はそれを理解しました!ここに私の

build.gradleです:

compile(
    libs.jacksonCore, 
    libs.jacksonBind, 
    libs.jacksonData 
) 

そしてlibs.gradle

jacksonCore: 'com.fasterxml.jackson.core:jackson-core:2.8.8', 
    jacksonBind: 'com.fasterxml.jackson.core:jackson-databind:2.8.8', 
    jacksonData: 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.8', 

私はjackson-datetype-jsr310jackson-corejackson-databindに事前に構築されていたと思ったが、どうやらそうではありません。

関連する問題