Jacksonの@JsonFormatのガイド
1. 概要
この記事では、Jacksonで@JsonFormatを使用する方法を理解しようとしています。 JSON出力のフィールドやプロパティをフォーマットする方法を指定するために使用されるJacksonアノテーションです。 具体的には、この注釈により、フォーマット方法を指定できます。
具体的には、この注釈を使用すると、SimpleDateFormat形式に従ってDateおよびCalendar値をフォーマットする方法を指定できます。
2. メーベン依存
@JsonFormatはjackson-databindパッケージで定義されているため、次のMaven依存関係が必要です。
com.fasterxml.jackson.core
jackson-databind
2.9.4
3. 入門
3.1. デフォルト形式の使用
開始するには、ユーザーを表すクラスで@JsonFormatアノテーションを使用する概念を示します。
アノテーションの詳細を説明しようとしているため、Userオブジェクトはリクエストに応じて作成され(データベースに保存またはロードされません)、JSONにシリアル化されます。
public class User {
private String firstName;
private String lastName;
private Date createdDate = new Date();
// standard constructor, setters and getters
}
このコード例をビルドして実行すると、次の出力が返されます。
{"firstName":"John","lastName":"Smith","createdDate":1482047026009}
ご覧のとおり、createdDateフィールドは、Dateフィールドに使用されるデフォルトの形式であるエポックからの秒数として表示されます。
3.2. ゲッターでの注釈の使用
ここで、@JsonFormatを使用して、createdDateフィールドをシリアル化する形式を指定します。 以下は、この変更のために更新されたUserクラスです。 createdDateフィールドには、日付形式を指定するために示されているように注釈が付けられています。
pattern引数に使用されるデータ形式は、SimpleDateFormatで指定されます。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ")
private Date createdDate;
この変更が行われたら、プロジェクトを再度ビルドして実行します。 出力は次のとおりです。
{"firstName":"John","lastName":"Smith","createdDate":"[email protected]:53:34.740+0000"}
ご覧のとおり、createdDateフィールドは、@JsonFormatアノテーションを使用して指定されたSimpleDateFormat形式を使用してフォーマットされています。
上記の例は、フィールドで注釈を使用する方法を示しています。 次のように、getterメソッド(プロパティ)で使用することもできます。
たとえば、呼び出し時に計算されるプロパティがあります。 このような場合は、getterメソッドで注釈を使用できます。 インスタントの日付部分のみを返すようにパターンも変更されていることに注意してください。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
public Date getCurrentDate() {
return new Date();
}
結果の出力は次のとおりです。
{ ... , "currentDate":"2016-12-18", ...}
3.3. ロケールの指定
日付形式の指定に加えて、シリアル化に使用するロケールも指定できます。 このパラメーターを指定しないと、デフォルトのロケールでシリアル化が実行されます。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ", locale = "en_GB")
public Date getCurrentDate() {
return new Date();
}
3.4. 形状の指定
shapeをJsonFormat.Shape.NUMBERに設定して@JsonFormatを使用すると、Dateタイプのデフォルト出力が生成されます—エポックからの秒数として.パラメーター%(t5 )sはこの場合には適用されず、無視されます。
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
public Date getDateNum() {
return new Date();
}
出力は次のとおりです。
{ ..., "dateNum":1482054723876 }
4. 結論
結論として、@JsonFormatは、上記のようにDateおよびCalendarタイプの出力フォーマットを制御するために使用されます。
上記のサンプルコードは利用可能なover on GitHubです。