我使用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