Java JSON解析错误:反序列化属性时出现问题';税收水平';(预期类型:[map

Java JSON解析错误:反序列化属性时出现问题';税收水平';(预期类型:[map,java,jackson,Java,Jackson,我正在反序列化json: "taxLevels": [{ "code": "VAT", "percentage": 19.0 } ] 我有模型课: public class Model{ @JsonDeserialize(using = TTaxLevelDeserializer.class) private final List<TTaxLevel&g

我正在反序列化json:

"taxLevels": [{
        "code": "VAT",
        "percentage": 19.0
    }
]
我有模型课:

public class Model{

   @JsonDeserialize(using = TTaxLevelDeserializer.class)
    private final List<TTaxLevel> taxLevels = new ArrayList<>();
}
我必须编写自定义反序列化程序,因为出现错误:

[决议 [org.springframework.http.converter.httpMessageNodeTableException: JSON分析错误:无法反序列化的实例
java.util.LinkedHashMap
开始\u数组标记;嵌套异常为 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法 反序列化的实例
java.util.LinkedHashMap
在[Source:(PushbackInputStream)处启动\u数组令牌;行:36, 列:19](通过参考链:…模型[“税收水平])]]

公共类TTAXevelDeserializer扩展JsonDeserializer{
@凌驾
公共列表反序列化(JsonParser p,DeserializationContext ctxt)抛出IOException,JsonProcessingException{
JsonNode node=p.getCodec().readTree(p);
List tTaxLevels=newObjectMapper().readerFor(newTypeReference(){}).readValue(节点);
返回到当前级别;
}
}
现在它返回正确的
列表tTaxLevels
,但我有一个错误:

[org.springframework.http.converter.httpMessageNodeTableException: JSON分析错误:反序列化属性“TaxLevel”时出现问题(应为 类型:[映射类型;类java.util.map,[简单类型,类] java.lang.String]->[简单类型,类java.lang.String]];实际 类型:
java.util.ArrayList
),问题:参数类型不匹配;嵌套 异常为com.fasterxml.jackson.databind.JsonMappingException: 反序列化属性“taxLevels”(预期类型:[映射类型; 类java.util.Map,[简单类型,类java.lang.String]->[简单 类型,类java.lang.String]];实际类型:
java.util.ArrayList
), 问题:[Source:(PushbackInputStream)处的参数类型不匹配; 行:40,列:5](通过参考链: …模型[“税级”])]]

它为什么期待地图?
是否有强制将其反序列化为列表的选项?

尝试使用地图数据结构而不是列表

Map<String,List<TTaxLevel>>
Map

您不需要自定义反序列化程序。@AbhijitSarkar您有什么建议?没有它我有错误。大约有50个引用,我必须更改代码。是否有其他选项将其视为ArrayList而不是Map?
public class TTaxLevelDeserializer extends JsonDeserializer<List<TTaxLevel>>{

    @Override
    public List<TTaxLevel> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        JsonNode node = p.getCodec().readTree(p);
        List<TTaxLevel> tTaxLevels = new ObjectMapper().readerFor(new TypeReference<List<TTaxLevel>>(){}).readValue(node);
        return tTaxLevels;
    }

}
Map<String,List<TTaxLevel>>