Ich habe einen benutzerdefinierten Deserializer geschrieben, um nur die erforderlichen Felder mit Jackson zuzuordnen. Hier geht.Übergeben Sie ein Feld an benutzerdefinierte Deserializer-Klasse 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;
}
}
Ich habe auch eine Mixinklasse, um zusätzliche Anmerkungen hinzuzufügen.
@JsonDeserialize(using = GeneralDeserializer.class)
public class GeneralDomainMixIn{}
Ich hole das Objekt auf diese Weise
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);
Dies funktioniert gut. Aber wie Sie im benutzerdefinierten Deserializer sehen können, codiere ich den Ereignisfeldwert hart. Dies wird von einer anderen Instanzvariable in der Hauptklasse weitergegeben. Ich muss dieses Feld an den benutzerdefinierten Deserializer übergeben. Gibt es eine Möglichkeit, auf diese Variable im Deserializer zuzugreifen? Oder gibt es einen anderen alternativen Weg, dies zu erreichen? Bitte hilf mir. Vielen Dank.
Möglicherweise bereits beantwortet hier http://stackoverflow.com/questions/2713316 1/How-to-Pass-Konstruktoren-Parameter-mit-Jackson. Hilft das? –
@DanielScott Entschuldigung für die verspätete Antwort. Ja, ich habe den von Ihnen geposteten Link durchsucht. Das Problem für mich ist, dass ich eine MixIn-Klasse habe, die '@ deserialize'-Annotation verwendet. Selbst wenn ich einen Konstruktor erstelle, um den Wert zu übernehmen, den ich übergeben muss, wie wird das mit der MixIn-Klasse gemacht? Kannst du es bitte erklären, wenn du es weißt? Vielen Dank – 15R6