2025.08.29
Laravelで空判定にif文を使うとハマる理由
2018.11.27
プログラミングJacksonで独自のJSONシリアライズをする

こんにちはH.Rです。
今回はJavaのJSONライブラリであるJacksonのCustomSerializerを使って独自実装のシリアライズをします。
CustomSerializerを使えば柔軟なJSONを作成することができます。
紹介する前に通常のシリアライズ例をあげます。
簡単なUserクラスもとにシリアライズします。
public class User {
public int id;
public String name;
}
User user = new User(1, "theUser");
String serialized = new ObjectMapper().writeValueAsString(user);
実行すると
{
"id": 1,
"name": "theUser"
}
となります。
それではCustomSerializerを使ったシリアライズをします。
Userクラスを下記のように変更してフルネームをJSONにするようにカスタムします。
@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クラス用のカスタムシリアライザを作成します。
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();
}
}
それではシリアライズを実行します。
User user = new User(1, "John", "Doe"); String serialized = new ObjectMapper().writeValueAsString(user);
{
"id": 1,
"fullName": "John Doe"
}
簡単にできました。
@JsonSerialize で指定したカスタムシリアライザを実行時に呼び出してシリアライズを行っています。
これによりメソッドを使ったJSONを作成することができました。
@JsonSerialize はインタフェースに定義する事ができ、実装クラスごとにより柔軟なシリアライズを行うことができます。
以上CustomSerializerを使ったシリアライズを紹介しました。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
1
2025.08.29
Laravelで空判定にif文を使うとハマる理由
2

2025.08.29
Git SSH接続でfetch/pullができなくなった時の対処法
3

2025.08.28
【体験談】Amazon Linux 2でMySQLインストール時のOpenSSL・GPG key エラーにハマった話
4
2025.08.28
【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順
5
2025.07.24
Log::info()が使えない!?Laravel.logのPermission denied エラーを解決する(Docker環境)
タグ検索