我正在尝试用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有问题。
答案 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);
}