2017-10-24 13 views
0

すべてのargsコンストラクタとBuilderのみを持つ値クラス(final、setterなし)を逆シリアル化することは可能ですか? JsonDeserializeJsonPOJOBuilderを使用することはできません。クライアントライブラリで定義されたモデルを逆シリアル化しようとしているため、注釈を追加できません。別の方法でビルダーを指定することはできますか?Jackson - 注釈なしでBuilderを使用して非直列化

+0

ただ実行するnt独自の 'JsonDeserializer' – rkosegi

+0

@rkosegi基本的にすべてのフィールド名を列挙してビルダーを手動で呼び出さなければ簡単な方法はないでしょうか? – gta0004

+0

デシリアライズする必要があるオブジェクトは複数ありますか? – rkosegi

答えて

1

MixInを試すことができます。

私はあなたのユースケースのための一つのサンプルを作成しました:

オリジナルクラス:

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) 
abstract class SampleMixin { 
    @JsonCreator 
    public SampleMixin(@JsonProperty("id") int id) { 
    } 
} 

Deserilaization:

final class Sample { 

    final int id; 

    Sample(int id) { 
     this.id = id; 
    } 
} 

ミックスインは(同じ引数を持つ非引数コンストラクタを提供します)

ObjectMapper mapper = new ObjectMapper(); 
mapper.addMixIn(Sample.class, SampleMixin.class); 
Sample sample = mapper.readValue(json, Sample.class); 
+0

私は実際にそれをさらに進め、 '' @JsonDeserialize(builder = ..) ''をミックスインし、それは働いた!そうすれば、すべてのフィールドをマップする必要はありません。ありがとう! – gta0004

関連する問題