高德地图API返回的字符串字段,如果为空,会返回一个空数组,在使用Jackson进行反序列时会遇到问题。
下面是高德地图输入提示接口返回的一段JSON,其中的字符串字段如果有值的话就是字符串,没值的话就是一个空数组。
{
"id": [],
"name": "肯德基",
"district": [],
"adcode": [],
"location": [],
"address": [],
"typecode": [],
"city": []
},
{
"id": "B0FFKEPXS2",
"name": "肯德基(望京西店)",
"district": "北京市朝阳区",
"adcode": "110105",
"location": "116.473974,39.997746",
"address": "望京西园丙410号楼一层3号",
"typecode": "050301",
"city": []
},
在使用Jackson进行反序列时会报如下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type
java.lang.String
from Array value (tokenJsonToken.START_ARRAY
)
解决方案:配置Jackson强制转换规则,允许将空数组转换为null值,代码如下:
ObjectMapper objectMapper = new ObjectMapper();
// 配置Jackson强制转换规则,允许将空数组转换为null值
objectMapper.coercionConfigFor(LogicalType.Textual)
.setCoercion(CoercionInputShape.EmptyArray, CoercionAction.AsNull);