メニューを閉じる

テクノデジタルグループ

メニューを開く

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つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事