Ho un oggetto di dominio che ha una mappa:Impossibile trovare un (Map) deserializzatore chiave per il tipo di [tipo semplice, classe com.comcast.ivr.core.domain.AutoHandlingSlotKey]
private Map<AutoHandlingSlotKey, LinkedHashSet<AutoFunction>> autoHandling;
Quando ho serializzare l'oggetto, ottengo questo:
"autoHandling" : [ "java.util.HashMap", {
} ],
chiave di questa mappa è un oggetto personalizzato:
public class AutoHandlingSlotKey implements Serializable {
private FunctionalArea slot; // ENUM
private String returnView; // ENUM
Quindi, io non sono sicuro di come risolvere il problema che ho continuo a ricevere quando ho deserializzare l'oggetto:
org.codehaus.jackson.map.JsonMappingException: Can not find a (Map) Key deserializer for type [simple type, class com.comcast.ivr.core.domain.AutoHandlingSlotKey]
Qualcuno può aiutarmi a capire come risolvere questo problema se faccio NON avere accesso all'oggetto dominio da modificare?
Dopo un test rapido, penso che le chiavi siano serializzate usando il loro metodo toString, che probabilmente non è quello che vuoi. Creare un serializzatore di chiavi sembra una buona opzione. – Suma
Questo è il fallback se non viene trovato nient'altro. Ci sono alternative: se il tipo ha un costruttore pubblico di argomenti con stringa singola, ad esempio, verrà utilizzato. Oppure un metodo factory con argomento a stringa singola annotato con '@ JsonCreator'.Ciò eliminerà la necessità di scrivere e registrare un deserializzatore di chiave personalizzato. – StaxMan
Ottimo - ma tu descrivi il deserializzatore (lo proverò). Che ne pensi di serializzatore? Nel mio caso è stato usato toString (per una classe caso Scala). Quali altre opzioni ci sono per il serializzatore, oltre a scrivere il mio? – Suma