【问题标题】:Jackson Error Java EnumMap杰克逊错误Java EnumMap
【发布时间】:2018-05-14 16:23:24
【问题描述】:

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

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

    }

诊断结果类是这样的:

public class DiagnoticResults extends EnumMap<ResultTypeEnum, byte[]> {

    public DiagnoticResults() {
        super(ResultTypeEnum.class);
    }
}

这是我从另一个遇到 EnumMap 问题的用户那里编写的课程。

【问题讨论】:

    标签: java jackson jersey enum-map


    【解决方案1】:

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

    客户端代码在创建EnumMap&lt;K, V&gt; 时似乎存在问题 通过调用构造函数EnumMap(Class&lt;K&gt;), 因为没有关于使用哪个泛型类型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);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 2020-06-30
      • 2018-08-20
      • 1970-01-01
      • 2016-07-21
      • 2015-08-27
      相关资源
      最近更新 更多