ジャクソンとオブジェクトへのマップのマーシャリング

CuNimb

私はJacksonを使用してWebアプリケーションへのjson呼び出しをマーシャリングしており、さまざまなオブジェクトを受け入れるメソッドを設計しようとしています。

例えば:

私は2つのクラス構造を持っています

{
    name:"Joe",
    surname:"Bloggs"
}

JavaクラスPersonに対応します

{
    address1:"21 Main st",
    city:"Georgetown",
    zip:"12345"
}

Javaクラスアドレスに対応します

次に、これらのクラスのいずれかを次のように処理できる呼び出しを行います。

 {
      type:"Person",
      data:{
         name:"Joe",
         surname:"Bloggs"
      }
 }

上記のリクエストをマップにマーシャリングする呼び出しを作成することも、オブジェクト構造ごとに1つずつ、2つの個別のリクエストを作成して、対応するクラスに直接マーシャリングすることもできます。

ジャクソンを使用して上記のリクエストをマップにマーシャリングし、マップの一部(例:map.get( "type"))を読み取った後、ジャクソンを使用してサブオブジェクト(例:map.get)をマーシャリングすることは可能ですか? ( "data")-jsonに再変換せずに、対応するJavaクラスに変換しますか?

イリヤ・オベスノフ

ジャクソンポリモーフィズムを使用できます。簡単な例を次に示します。

public class Polymorphism3Main {

    public static void main(String []args) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();

        String json = objectMapper.writeValueAsString(generatePerson());
        System.out.println("json = " + json);
        System.out.println(objectMapper.readValue(json, Request.class));

        json = objectMapper.writeValueAsString(generateAddress());
        System.out.println("json = " + json);
        System.out.println(objectMapper.readValue(json, Request.class));
    }

    private static Person generatePerson() {
        Person result = new Person();
        result.setName("name");
        result.setSurname("surname");
        return result;
    }

    private static Address generateAddress() {
        Address address = new Address();
        address.setAddress1("address 1");
        address.setCity("city");
        address.setZip("324212");
        return address;
    }
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
        @JsonSubTypes.Type(value = Person.class, name = "person"),
        @JsonSubTypes.Type(value = Address.class, name = "address")
})
interface Request {
}

class Person implements Request {
    private String name;
    private String surname;
}

class Address implements Request {
    private String address1;
    private String city;
    private String zip;
}

そのコードはわずかに異なるjsonを生成しますが、それでも問題ありません。

{"person":{"name":"name","surname":"surname"}}
{"address":{"address1":"address 1","city":"city","zip":"324212"}}

投稿したものとまったく同じjson形式にしたい場合は、ラッパーオブジェクトを作成する必要があります。

一般に、これら2つの要求を異なる方法で処理するために、2つの別個のメソッドを作成することをお勧めします。その場合、コードはよりクリーンになり、リクエストインターフェイスを介して個人と住所を組み合わせる必要はありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

GoLangオブジェクトへの複雑なJSONマーシャリング

分類Dev

GoLangオブジェクトへの複雑なJSONマーシャリング

分類Dev

GolangでのトップレベルのJSONオブジェクトのマーシャリング解除

分類Dev

オブジェクトのマップのジャクソンシリアル化

分類Dev

オブジェクト内のJAXBアンマーシャリングオブジェクト

分類Dev

groovyのオブジェクトへのjson文字列を含むmysql文字列列のマーシャリング

分類Dev

JSONオブジェクトの値のマーシャリング解除

分類Dev

子クラスオブジェクトへのオプションのマップタイプキャスト

分類Dev

JAX-WSでのポリモーフィックオブジェクトのマーシャリング

分類Dev

選択的マーシャリングオブジェクト

分類Dev

配列としてのスプリングブートジャクソン単一オブジェクト

分類Dev

C#スレッド間でのCOMオブジェクトのマーシャリング

分類Dev

マルチチャネルシーケンスオブジェクトのプロットと並べ替え

分類Dev

スプリングフォームとセッションオブジェクトのマッピング

分類Dev

Parcelableオブジェクトのエラー:不明なタイプコードのアンマーシャリング***オフセット***

分類Dev

アンマーシャルJAXBオブジェクトのJavaジェネリック

分類Dev

抽象オブジェクトのリストのJaxbアンマーシャリング

分類Dev

Googleローソク足チャートオブジェクトのマッピング

分類Dev

ケースクラスオブジェクトのマーシャリングリスト

分類Dev

非常に大きなXMLファイルの解析とJavaオブジェクトへのマーシャリング

分類Dev

JAXBアンマーシャリング-子要素の属性をJavaオブジェクトにマップします

分類Dev

オブジェクト内のオブジェクトをマーシャリングするために@XmlElementと@XmlRootElementを使用する方法

分類Dev

MirthのプリプロセッサフェーズでJavaオブジェクトをXMLにマーシャリングしますか?

分類Dev

MirthのプリプロセッサフェーズでJavaオブジェクトをXMLにマーシャリングしますか?

分類Dev

ジャクソン:ネストされたオブジェクトのマッピング

分類Dev

ガトリング:JsonResponseからマップオブジェクトへのマップフィールド

分類Dev

ジャクソンとのマップにネストされたJSONオブジェクトのブール値を変換するための改善方法

分類Dev

RESTAPIでの複合オブジェクトのアンマーシャリング

分類Dev

Golangのマーシャリング/アンマーシャリング時間オブジェクトで予期しない失敗が発生する

Related 関連記事

  1. 1

    GoLangオブジェクトへの複雑なJSONマーシャリング

  2. 2

    GoLangオブジェクトへの複雑なJSONマーシャリング

  3. 3

    GolangでのトップレベルのJSONオブジェクトのマーシャリング解除

  4. 4

    オブジェクトのマップのジャクソンシリアル化

  5. 5

    オブジェクト内のJAXBアンマーシャリングオブジェクト

  6. 6

    groovyのオブジェクトへのjson文字列を含むmysql文字列列のマーシャリング

  7. 7

    JSONオブジェクトの値のマーシャリング解除

  8. 8

    子クラスオブジェクトへのオプションのマップタイプキャスト

  9. 9

    JAX-WSでのポリモーフィックオブジェクトのマーシャリング

  10. 10

    選択的マーシャリングオブジェクト

  11. 11

    配列としてのスプリングブートジャクソン単一オブジェクト

  12. 12

    C#スレッド間でのCOMオブジェクトのマーシャリング

  13. 13

    マルチチャネルシーケンスオブジェクトのプロットと並べ替え

  14. 14

    スプリングフォームとセッションオブジェクトのマッピング

  15. 15

    Parcelableオブジェクトのエラー:不明なタイプコードのアンマーシャリング***オフセット***

  16. 16

    アンマーシャルJAXBオブジェクトのJavaジェネリック

  17. 17

    抽象オブジェクトのリストのJaxbアンマーシャリング

  18. 18

    Googleローソク足チャートオブジェクトのマッピング

  19. 19

    ケースクラスオブジェクトのマーシャリングリスト

  20. 20

    非常に大きなXMLファイルの解析とJavaオブジェクトへのマーシャリング

  21. 21

    JAXBアンマーシャリング-子要素の属性をJavaオブジェクトにマップします

  22. 22

    オブジェクト内のオブジェクトをマーシャリングするために@XmlElementと@XmlRootElementを使用する方法

  23. 23

    MirthのプリプロセッサフェーズでJavaオブジェクトをXMLにマーシャリングしますか?

  24. 24

    MirthのプリプロセッサフェーズでJavaオブジェクトをXMLにマーシャリングしますか?

  25. 25

    ジャクソン:ネストされたオブジェクトのマッピング

  26. 26

    ガトリング:JsonResponseからマップオブジェクトへのマップフィールド

  27. 27

    ジャクソンとのマップにネストされたJSONオブジェクトのブール値を変換するための改善方法

  28. 28

    RESTAPIでの複合オブジェクトのアンマーシャリング

  29. 29

    Golangのマーシャリング/アンマーシャリング時間オブジェクトで予期しない失敗が発生する

ホットタグ

アーカイブ