2017-07-17 6 views
2

J'utilise dropwizard 1.1.0 avec les fonctions java 8. J'utilise aussi le paquet Immutables. Je suis confronté à un problème de désérialisation en essayant de convertir la liste des centres de profit (liste de chaînes) de JSON en équivalent java.Problème avec désérialisation dans dropwizard, impossible de convertir ImmutableList <String> en liste de chaînes

Erreur

Vous ne trouvez pas un désérialiseur pour le type de collection non-béton [type de collection; classe com.google.common.collect.ImmutableList, contient [type simple, classe java.lang.String]]

Immuable classe Java

@Value.Immutable 
@JsonSerialize(as = ImmutableReconciliationInputDTO.class) 
@JsonDeserialize(as = ImmutableReconciliationInputDTO.class) 
public interface ReconciliationInputDTO extends Serializable { 

@JsonProperty("date") 
@JsonDeserialize(using = LocalDateDeserializer.class) 
@JsonSerialize(using = LocalDateSerializer.class) 
LocalDate asOfDate(); 

@JsonProperty("label") 
String label(); 

@JsonProperty("entityId") 
String entityId(); 

@JsonProperty("entityName") 
String entityName(); 

@JsonProperty("departments") 
List<String> departments(); 

Immutables généré DTO ci-dessus à un classe finale avec des attributs comme ci-dessous

public final class ImmutableReconciliationInputDTO 
implements ReconciliationInputDTO { 
private final LocalDate asOfDate; 
private final String label; 
private final String entityId; 
private final String entityName; 
private final ImmutableList<String> departments; 

Dans mon bootstrap application dropwizard J'ai enregistré les modules ci-dessous

bootstrap.getObjectMapper().registerModule(new JavaTimeModule()); 
    bootstrap.getObjectMapper().registerModule(new Jdk8Module()); 
    bootstrap.getObjectMapper().registerModule(new ParameterNamesModule()); 

Dans mon pom.xml je suis en train de le ci-dessous que mes dépendances

<dependency> 
    <groupId>com.fasterxml.jackson.module</groupId> 
    <artifactId>jackson-module-parameter-names</artifactId> 
    <version>2.8.7</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-jdk8</artifactId> 
    <version>2.8.7</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-jsr310</artifactId> 
    <version>2.8.7</version> 
</dependency> 

Répondre

3

AFAIK vous devez inclure guava comme module jackson aussi. Il est ici: guava-module

Ils ont aussi un exemple comment intégrer:

registerModule(new GuavaModule()) 
+0

j'avais déjà ajouté le module de goyave précédemment et enregistré également dans mon application dropwizard pendant la phase d'initialisation. Mais cela n'a pas aidé. J'ai essayé à nouveau poster votre recommandation mais je reçois le même problème. Jackson n'est pas capable de convertir la liste Immutable en une collection Java correspondante, je suppose. Je ne sais pas comment résoudre ce problème. – megan

+1

@alice: Etes-vous certain que votre application ne contient qu'une seule instance 'ObjectMapper'? Se pourrait-il que vous en receviez un différent que celui que vous avez configuré? – Henrik