Je suis en train de tester deserializing
pour un objet collection
lorsque mon JsonNode
n'a aucune valeur. Je veux que l'objet soit égal à null
.Problème lors de la désérialisation d'un noeud Jackson vers une collection
C'est ce que je suis en train:
public class ImmutableDiscoveredUrlDeserializer extends JsonDeserializer<ImmutableDiscoveredUrl> {
String parentUrl;
Double parentUrlSentiment;
Set<String> childUrls;
Boolean isParentVendorUrl;
Map<TagClassification, Set<String>> parentUrlArticleTags;
/*
* (non-Javadoc)
* @see com.fasterxml.jackson.databind.JsonDeserializer#deserialize(com.fasterxml.jackson.core.JsonParser, com.fasterxml.jackson.databind.DeserializationContext)
*/
@Override
public ImmutableDiscoveredUrl deserialize(JsonParser p, DeserializationContext ctx)
throws IOException {
JsonNode node = p.readValueAsTree();
parentUrl = defaultIfNull(node.get("parentUrl").asText(), null);
childUrls = defaultIfNull(parseChildUrls(node), emptySet());
isParentVendorUrl = defaultIfNull(Boolean.valueOf(node.get("isParentVendorUrl").asText()), null);
parentUrlArticleTags = defaultIfNull(parseArticleTags(node.get("parentUrlArticleTags")), emptyMap());
return ImmutableDiscoveredUrl.discoveredUrl().parentUrl(parentUrl)
.parentUrlSentiment(parentUrlSentiment).childUrls(childUrls)
.isParentVendorUrl(isParentVendorUrl).parentUrlArticleTags(parentUrlArticleTags);
}
private Set<String> parseChildUrls(JsonNode node) throws IOException {
ObjectMapper tagsMapper = new ObjectMapper();
return tagsMapper.convertValue(node, new TypeReference<Set<String>>() {});
}
private Map<TagClassification, Set<String>> parseArticleTags(JsonNode node) throws IOException {
ObjectMapper tagsMapper = new ObjectMapper();
return tagsMapper.convertValue(node, new TypeReference<Set<String>>() {});
}
Mais je reçois un MismatchedInputException
, indiquant qu'il n'y a pas de contenu à la carte. Comment obtenir le ObjectMapper
pour renvoyer un null?
Hmm, maintenant je cette exception: java.lang.IllegalArgumentException: ne peut pas désérialiser instance de java.util.HashSet sur jeton START_OBJECT à [ Source: UNKNOWN line: -1, column: -1] Je ne reçois pas la même exception quand je cours votre extrait, donc je ne sais pas quel est le problème avec mon cas d'utilisation. – user1660256
C'est bizarre, l'extrait fonctionne bien pour moi, si je l'exécute comme un test JUnit. Quelle version de Jackson utilisez-vous? – hzpz
J'ai édité mon commentaire pour montrer qu'il a fonctionné réellement pour moi, désolé. La seule différence que je peux voir est que j'instancie un ObjectMapper pour lire l'arbre, et un autre pour obtenir le nœud. Cela peut-il être mon problème? – user1660256