0
JsonNode
の値がない場合、deserializing
からcollection
オブジェクトにテストしています。私はオブジェクトがnull
と等しくなるようにしたい。nullジャクソンノードをコレクションにデシリアライズする際に問題が発生しました
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>>() {});
}
をしかし、私はMismatchedInputException
を取得し、マップするコンテンツがありませんという内容:
これは私がしようとしているものです。 ObjectMapper
にnullを返すにはどうすればよいですか?すでにJsonNode
を持っているので
うーん、今私は、この例外を取得でSTART_OBJECTトークン の外にはjava.util.HashSetのインスタンスをデシリアライズすることはできませんが、[ソース:UNKNOWN; line:-1、column:-1]スニペットを実行するときに同じ例外が発生することはないので、私のユースケースで何が問題なのか分かりません。 – user1660256
これは変ですが、JUnitテストとして実行すると、スニペットはうまく動作します。ジャクソンのどのバージョンを使用していますか? – hzpz
私は実際に私のために走ったことを示すために私のコメントを編集しました、申し訳ありません。私が見ることのできる唯一の違いは、ツリーを読み取るためにObjectMapperをインスタンス化し、ノードを取得するために別のObjectMapperをインスタンス化することです。それは私の問題だろうか? – user1660256