Azure-sdk-for-java: JSONシリアル化をカスタマイズする機能を公開する

作成日 2019年06月08日  ·  3コメント  ·  ソース: Azure/azure-sdk-for-java

ユーザーがJSONシリアル化をカスタマイズできるようにするパブリックObjectMapper参照を削除しました。

これは、Azure / azure-cosmosdb-java#153がより適切なオプションを必要としているためです。

Client Cosmos Investigate v4-item feature-request

全てのコメント3件

次のブログ投稿を読んだ後: 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」以下のゼロ以外の正の整数を指定してください。これは、期限切れにならないことを意味します。

ここのドキュメントには、 ttlnullに設定すると機能すると記載されていますが、 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-この問題についての考えは?

このページは役に立ちましたか?
0 / 5 - 0 評価