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 メッセージに文字列が含まれている場合、次の例外がスローされます。
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 フィールドをマークするつもりはありません。 この関数を実行するためにデフォルトのデシリアライザーを上書きする方法を探しています。