我正在使用 Spring 的 MappingJacksonHttpMessageConverter 将 JSON 消息转换为控制器中的对象。
<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 消息中包含 String,则会抛出以下异常:
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"}
如您所见,这将产生异常,因为 image 应该是一个数组。
我想制作更宽容的自定义反序列化器。如果反序列化失败,则从 String 创建单个元素的 ArrayList。我将如何将其注入 MappingJacksonHttpMessageConverter 或 ObjectMapper?
我不希望使用注释来标记每个 ArrayList 字段,以便可以使用自定义反序列化。 我正在寻找一种方法来覆盖默认反序列化器以执行此功能。