我是Spring 4中的新手,我遇到了问题。 Mabye有人知道如何帮助我。
这个JSON不起作用,我得到了
异常是com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.util.ArrayList的实例
{
"placeAnOrder": {
"customer": {
"name": "adas",
"surname": "asdasd",
"street": "asd",
"homeNr": "ada",
"phone": "123123"
},
"orders": {
"order": {
{
"orderId": "1231",
"dateOrder": "2015-09-09 12:12:12",
"products": {
"product": [
{
"productId": "34234",
"price": "23423",
"quantity": "2"
}
]
}
}
}
}
}
}
这个JSON运行良好。
{
"placeAnOrder": {
"customer": {
"name": "adas",
"surname": "asdasd",
"street": "asd",
"homeNr": "ada",
"phone": "123123"
},
"orders": {
"order": [
{
"orderId": "1231",
"dateOrder": "2015-09-09 12:12:12",
"products": {
"product": [
{
"productId": "34234",
"price": "23423",
"quantity": "2"
}
]
}
}
]
}
}
}
在第一个JSON中,我有一个Order列表元素,但表示为{}而不是[]。第二,我有[]。 当我添加这个
时,我发现我可以处理这个第一个JSON<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" />
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="jacksonObjectMapper" />
<property name="targetMethod" value="configure" />
<property name="arguments">
<list>
<value type="com.fasterxml.jackson.databind.DeserializationFeature">ACCEPT_SINGLE_VALUE_AS_ARRAY</value>
<value>true</value>
</list>
</property>
</bean>
<mvc:annotation-driven>
<mvc:message-converters>
<!-- Jackson converter for HTTP messages -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
我将此添加到我的servlet.xml(除此之外我还有web.xml和applicationContext.xml)但它不起作用。我使用 fasterxml.jackson v.2.6.2 。
答案 0 :(得分:1)
JSON语法要求数组包含在方括号内,而不是花括号。根据{{3}}:
数组是有序的值集合。数组以[(左括号)开头,以]结尾(右括号)。值以(逗号)分隔。
默认情况下,Jackson使用严格的解析,因此抛出JsonMappingException
,因为数组是作为括号而不是方括号。
将以下内容添加到servlet.xml时,它会告诉Jackson将单个对象视为可与Java集合一起使用的数组:
<value type="com.fasterxml.jackson.databind.DeserializationFeature">ACCEPT_SINGLE_VALUE_AS_ARRAY</value>
根据杰克逊的文件:
public static final DeserializationFeature ACCEPT_SINGLE_VALUE_AS_ARRAY
确定是否可以强制使用非数组(在JSON中)值以使用Java集合(数组,java.util.Collection)类型的功能。如果启用,集合反序列化器将尝试处理非数组值,就像它们具有围绕JSON数组的“隐式”一样。此功能旨在用于兼容性/互操作性的原因,以便在数据库中只有一个元素的情况下使用会丢弃JSON数组的包(例如XML-to-JSON转换器)。
默认情况下禁用功能。