Java JSON解析错误:反序列化属性时出现问题';税收水平';(预期类型:[map
我正在反序列化json: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
"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>>