2

我正在使用具有 java 8 功能的 dropwizard 1.1.0。我也在使用 Immutables 包。尝试将利润中心列表(字符串列表)从 JSON 转换为 java 等效项时,我遇到了反序列化问题。

错误

找不到非具体集合类型的反序列化器 [collection type; com.google.common.collect.ImmutableList 类,包含 [简单类型,类 java.lang.String]]

不可变的 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 将上述 DTO 生成到具有以下属性的最终类

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;

在我的 dropwizard 应用程序引导程序中,我注册了以下模块

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

在我的 POM.xml 中,我将以下内容设置为我的依赖项

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

1 回答 1

4

AFAIK 你也应该包括guava一个杰克逊模块。它在这里:番石榴模块

他们还有一个如何集成它的示例:

registerModule(new GuavaModule())
于 2017-07-17T20:20:18.930 回答