2023.11.30
Mac→Windowsに移行した際にNode.js管理ツールにnvm for windowsを選んだ理由
2018.11.27
プログラミングJacksonで独自のJSONシリアライズをする
こんにちはH.Rです。
今回はJavaのJSONライブラリであるJacksonのCustomSerializerを使って独自実装のシリアライズをします。
CustomSerializerを使えば柔軟なJSONを作成することができます。
紹介する前に通常のシリアライズ例をあげます。
簡単なUserクラスもとにシリアライズします。
1 2 3 4 5 6 7 |
public class User { public int id; public String name; } User user = new User(1, "theUser"); String serialized = new ObjectMapper().writeValueAsString(user); |
実行すると
1 2 3 4 |
{ "id": 1, "name": "theUser" } |
となります。
それではCustomSerializerを使ったシリアライズをします。
Userクラスを下記のように変更してフルネームをJSONにするようにカスタムします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@JsonSerialize(using = UserSerializer.class) public class User { private int id; private String firstName; private String lastName; public User(int id, String firstName, String lastName) { this.id = id; this.firstName = firstName; this.lastName = lastName; } public String getId() { return id; } public String getFullName() { return fistName + " " + lastName; } } |
@JsonSerialize
は後ほど説明します。
次にUserクラス用のカスタムシリアライザを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class UserSerializer extends SrdSerializer<User> { public UserSerializer() { this(null); } public UserSerializer(Class<User> t) { super(t); } @Override Public void serialize(User value, JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeStartObject(); gen.writeNumberField("id", value.getId()); gen.writeStringField("fullName", value.getFullName()); gen.writeEndObject(); } } |
それではシリアライズを実行します。
1 2 |
User user = new User(1, "John", "Doe"); String serialized = new ObjectMapper().writeValueAsString(user); |
1 2 3 4 |
{ "id": 1, "fullName": "John Doe" } |
簡単にできました。
@JsonSerialize
で指定したカスタムシリアライザを実行時に呼び出してシリアライズを行っています。
これによりメソッドを使ったJSONを作成することができました。
@JsonSerialize
はインタフェースに定義する事ができ、実装クラスごとにより柔軟なシリアライズを行うことができます。
以上CustomSerializerを使ったシリアライズを紹介しました。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノモバイルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
最近の記事
タグ検索
SNS共有