2017-07-17 2 views
2

Ich benutze Dropwizard 1.1.0 mit Java 8 Funktionen. Ich verwende auch Immutables-Paket. Ich stehe vor einem Deserialisierungsproblem, wenn ich versuche, eine Liste von Profitcentern (String-Liste) von JSON in Java-Äquivalent zu konvertieren.Problem mit der Deserialisierung in DropWizard, kann ImmutableList <String> in String-Liste nicht konvertieren

Fehler

keine Deserializer für Nicht-Beton Sammlungstyp [Kollektionstyp gefunden; Klasse com.google.common.collect.ImmutableList enthält [einfache Art, Klasse java.lang.String]]

Immutable Java-Klasse

@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 erzeugt die oben DTO ein Abschlussklasse mit Attributen wie unten

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; 

In meiner dropwizard Anwendung Bootstrap ich habe die unten Module registriert

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

In meinem pom.xml Ich gründe die unten als meine Abhängigkeiten

<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> 

Antwort

3

AFAIK Sie guava als jackson Modul auch enthalten sollte. Es ist hier: guava-module

Sie auch ein Beispiel haben, wie es zu integrieren:

registerModule(new GuavaModule()) 
+0

Ich hatte bereits die Guave-Modul früher aufgenommen und registriert es auch in meinem dropwizard Anwendung während initialize Phase. Aber das hat nicht geholfen. Ich habe noch einmal versucht, Ihre Empfehlung zu posten, aber ich bekomme das gleiche Problem. Jackson ist nicht in der Lage, die unveränderbare Liste in eine entsprechende Java-Sammlung zu konvertieren, nehme ich an. Ich bin mir nicht sicher, wie ich das beheben kann. – megan

+1

@alice: Sind Sie sicher, dass Ihre Anwendung nur eine "ObjectMapper" -Instanz enthält? Könnte es sein, dass Sie tatsächlich einen anderen als den von Ihnen konfigurierten erhalten? – Henrik

Verwandte Themen