杰克逊错误Java EnumMap

时间:2018-05-14 16:23:24

标签: java jackson jersey enum-map

我正在尝试用Jackson反序列化EnumMap,我遇到了以下错误:

Switch

这是我用于密钥的枚举:

javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct EnumMap; generic (key) type not available
 at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@793ff30f; line: 1, column: 1]

服务器代码是:

public enum ResultTypeEnum
{
    PRESETS,
    SUMMARY,
    TERMINATION,
    TIMESERIES
}

客户端代码是:

@GET
    @Path("/results")
    @Produces(MediaType.APPLICATION_JSON)
    public DiagnoticResults getAllResults() {
        try {
            return subjectService.onGetAllResults();

        } catch (IllegalOperationException ex) {
            throw new InternalServerErrorException(ex);
        }
    }

诊断结果类是:

@SuppressWarnings("unchecked")
    public EnumMap getAllResults() {
        return client.target(subjectURI + "results").request(MediaType.APPLICATION_JSON)
                .get(EnumMap.class);

    }

这是我从其他用户写的一个类,它与EnumMap有问题。

1 个答案:

答案 0 :(得分:0)

我无法重现您的问题,所以我在这里猜测。

似乎客户端代码在创建EnumMap<K, V>时遇到问题 通过调用构造函数EnumMap(Class<K>), 因为没有关于使用哪种通用类型K类型的信息。

因此,在您的客户端代码中,您应该将EnumMap替换为DiagnoticResults 而不是你的代码

@SuppressWarnings("unchecked")
public EnumMap getAllResults() {
    return client.target(subjectURI + "results").request(MediaType.APPLICATION_JSON)
            .get(EnumMap.class);
}

试试这段代码:

public DiagnoticResults getAllResults() {
    return client.target(subjectURI + "results").request(MediaType.APPLICATION_JSON)
            .get(DiagnoticResults.class);
}