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.
Vous devez vous connecter pour publier un commentaire.
Découvrez cet article décrit comment utiliser les fonctionnalités de la jackson objectMapper pour accomplir cette tâche.
https://github.com/FasterXML/jackson-dataformat-xml/issues/21
Pour moi adjonction résolu ce problème,
Autant que je le vois entrant JSON ne contiennent pas de tableau. La question est: est "images" censé être séparés ou il contient une seule image? Admettons qu'ils sont séparés par des virgules:
images
champ pour être une simple chaîne de caractères (si elle contient une seule image), ou de modifier le format de la chaîne JSON pour envoyer un tableau au lieu d'une chaîne.