我使用Spring的MappingJacksonHttpMessageConverter将JSON消息转换为我的控制器中的对象。从串反序列化ArrayList使用Jackson
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="prefixJson" value="false" />
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
对于被声明为ArrayList的字段,如果该JSON消息包含字符串代替,下面将引发异常:
org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
一个例子是下面的类定义:
public class Product {
private String name;
private List<String> images;
}
如果传入的JSON是:
{name:"Widget", images:"image1.jpg"}
正如你所看到的,这将产生异常,因为图像应该是一个数组。
我想制作一个更耐用的自定义解串器。如果反序列化失败,请从String中创建一个单个元素的ArrayList。我将如何去注入MappingJacksonHttpMessageConverter或ObjectMapper?
我不想使用注释来标记每个ArrayList字段,因此可以使用自定义的反序列化。 我正在寻找一种方法来覆盖默认的解串器来执行此功能。
什么是你试图反序列化原始字符串? – 2012-04-20 14:46:12
说它是{产品:“1234”}而不是{产品:[“1234”]} – ltfishie 2012-04-20 15:06:33
,你是如何试图反序列化它?你可以发布一些代码吗? – 2012-04-20 15:10:42