jacksonを使用して必要なフィールドのみをマッピングするカスタムデシリアライザを作成しました。ここに行く。カスタムデシリアライザクラスにフィールドを渡す
public class GeneralDeserializer extends JsonDeserializer<GeneralDomain> {
@Override
public GeneralDomain deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final JsonNode jsonNode = jp.getCodec().readTree(jp);
final Map<String, String> map = new ObjectMapper().convertValue(jsonNode, Map.class);
final String event = "Proxy";
return new GeneralDomain(map.get("id"), event, map.get("name"), map.get("lastLogin"));
}
@Override
public Class<GeneralDomain> handledType() {
return GeneralDomain.class;
}
}
私は余分な注釈を追加するためにmixinクラスも持っています。
@JsonDeserialize(using = GeneralDeserializer.class)
public class GeneralDomainMixIn{}
私はこれは素晴らしい作品
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(GeneralDomain.class, SimpleRevealPublicEventMixIn.class);
String json = "{\"id\": 111, \"name\": David, \"lastLogin\": \"02-10-2016 10:32:00 AM\"}";
GeneralDomain readValue = mapper.readValue(json, GeneralDomain.class);
、この方法でオブジェクトを取得します。しかし、カスタムデシリアライザで見ることができるように、私はイベントフィールド値をハードコーディングしています。これは、メインクラスの他のインスタンス変数によって渡されます。このフィールドをカスタムデシリアライザに渡す必要があります。デシリアライザ内でこの変数にアクセスする方法はありますか?あるいはこれを達成するための他の方法がありますか?私を助けてください。ありがとう。
おそらく既にここに回答している可能性があります。http://stackoverflow.com/questions/2713316 1/how-to-pass-constructors-parameters-with-jacksonを使用します。これは役に立ちますか? –
@DanielScott遅く返事を申し訳ありません。はい、私はあなたが投稿したリンクを通過しました。私の問題は、 '@ deserialize'アノテーションを使用するMixInクラスがあることです。たとえ私が渡す必要のある値を取るコンストラクタを作成したとしても、MixInクラスでどのようにこれを行うのですか?あなたが知っていれば説明していただけますか?ありがとう – 15R6