Désérialiser ArrayList de String à l'aide de Jackson

Je suis à l'aide du Printemps MappingJacksonHttpMessageConverter à convertir en JSON message à l'objet de mon contrôleur.

<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>

Pour les champs qui sont déclarés comme ArrayList, si le json message contient une Chaîne de caractères au lieu de cela, l'exception suivante est levée:

org.springframework.http.converter.HttpMessageNotReadableException: 
 Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

Un exemple serait la définition de la classe ci-dessous:

public class Product {
   private String name;
   private List<String> images;
}

Où les entrants Json est:

{name:"Widget", images:"image1.jpg"}

COMME vous pouvez le voir, cela permettra de produire de l'exception, puisque l'image est censée être un tableau.

Je voudrais faire de la coutume deserializer qui est un peu plus tolérant. Si la désérialisation échoue, de créer une liste de tableaux d'un seul élément de la Chaîne. Comment pourrais-je aller sur d'injecter de l'air dans le MappingJacksonHttpMessageConverter ou ObjectMapper?

Je ne cherche pas à utiliser les annotations pour chaque marque et chaque liste de tableaux champ personnalisé désérialiser pourrait être utilisé. Je suis à la recherche d'un moyen de remplacer la valeur par défaut deserializer à exécuter cette fonction.

  • Qu'est-ce que la chaîne d'origine que vous essayez de désérialiser?
  • dire que c'est {produit: "1234"} au lieu de {produit: ["1234"]}
  • et comment êtes-vous essayer de désérialiser? pouvez-vous mettre un peu de code?
  • Je suis à l'aide de Printemps MappingJacksonHttpMessageConverter à désérialiser. Je vais poster ma configuration.
InformationsquelleAutor ltfishie | 2012-04-20