簡體   English   中英

傑克遜錯誤Java EnumMap

[英]Jackson Error Java EnumMap

我正在嘗試使用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發生問題的用戶那里編寫的類。

我無法重現您的問題,因此我在這里有點猜測。

似乎客戶端代碼在通過調用構造函數EnumMap(Class<K>)創建EnumMap<K, V>遇到問題,因為沒有有關使用哪種泛型類型K信息。

因此,在您的客戶端代碼,您應該更換EnumMapDiagnoticResults
代替你的代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM