ユーザーがJSONシリアル化をカスタマイズできるようにするパブリックObjectMapper参照を削除しました。
これは、Azure / azure-cosmosdb-java#153がより適切なオプションを必要としているためです。
次のブログ投稿を読んだ後: https ://devblogs.microsoft.com/cosmosdb/difference-between-null-and-undefined/JavaSDKを使用してこれを実現する方法を考えていました。
デフォルトのObjectMapperは、常にnullフィールドをシリアル化するように構成されています。
ttl
フィールドをエンティティクラスに追加するときに、これに遭遇しました。 特定のCosmosDBアイテムを更新するときにカスタムTTLを設定したいのですが、ほとんどのアイテムはカスタムTTLを必要とせず、コンテナーTTLを使用するだけで済みます。 したがって、フィールドはnullになります。
しかし、 ttl
フィールドをnull
に設定すると、次のエラーが発生します。
入力ttl'null'は無効です。 「2147483647」または「-1」以下のゼロ以外の正の整数を指定してください。これは、期限切れにならないことを意味します。
ここのドキュメントには、 ttl
をnull
に設定すると機能すると記載されていますが、 null
が同じ意味であるかどうかは定かではありません。
@kushagraThaparこれは、SDKのいくつかの高度なユースケースを実際に制限するため、ここでいくつかの解決策を見たいと思います。 それで、多分あなたはそれを「駐車場」から再び動かして、それに高い優先順位を割り当てることができますか?
たとえば、 https://github.com/FasterXML/jackson-module-kotlinはSDKに隠された静的ObjectMapperに登録されていないため、すぐに使用できるKotlinクラスを使用することはできません。 これにより、不変のデータクラスの逆シリアル化を機能させるための非常に醜い回避策として、Kotlinクラスに手動で注釈を付ける必要があります。
data class Email <strong i="9">@JsonCreator</strong> constructor(
<strong i="10">@param</strong>:JsonProperty("email") val email: String // note the redundant specification of "email"
)
または、アプリケーションのライフサイクルの早い段階で、その静的ObjectMapperインスタンスでUtils.getSimpleObjectMapper().registerModule(new KotlinModule())
を呼び出すなどのハックを実行します。
@dkroehanの回避策は、 ttl
クラスフィールドで<strong i="16">@get</strong>:JsonInclude(JsonInclude.Include.NON_NULL)
(Kotlin)を使用することです。
@ xinlian12-この問題についての考えは?