次の Java クラスがあり、Jackson を使用して JSON にシリアル化したい:
public class Event
boolean allDay;
Date start;
Date end;
// get/set
}
しかし、allDay が true の場合は「yyyy-MM-dd」、allDay が false の場合は「yyyy-MM-dd HH:mm」として日付をフォーマットしたいと考えています。それは可能ですか?
これを行うための組み込みの方法はないと思います。つまり、カスタムのシリアル化コードを作成する必要があります。JsonDeserializeは、おそらく開始したい場所です。
また、JSONを使用するコードが、2つの代替形式を処理する方法を知っていることを確認する必要があります。これは、まったく別の混乱です。タイムスタンプをフォーマットせずに送信し(デフォルトでは、エポックからのミリ秒数として書き込むのがデフォルトだと思います)、ユーザーに表示する前にクライアントコードがタイムスタンプを適切にフォーマットしていることを確認する方が実際には理にかなっています。
マイクの答えは正しいです。現在のシリアライザー (およびおそらくデシリアライザー) は明らかな方法です。このような相互制約のケースを処理するためのより具体的なサポートは考えられません。
逆シリアル化の場合、コンストラクター (または静的ファクトリ メソッド) に @JsonCreator を使用することも検討できます。利点は、渡されるブール値フラグと文字列値の両方を定義できるため、カスタム処理を行う方が少し簡単です。