杰克逊错误Java EnumMap



我正在尝试用杰克逊反序列化一个 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 时遇到了问题。

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

客户端代码似乎在创建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);
}

相关内容

  • 没有找到相关文章

最新更新