使用Jackson反序列化某些JSON标记

时间:2012-08-16 17:16:06

标签: java json jackson deserialization

如果我不想反序列化所有这些标记,以便我可以使用这个构造函数,那么我是否有办法从JSON中“手动”提取标记?

public class Tweet {
    public String username;
    public String message;
    public String image_url;

    @JsonCreator
    public Tweet(
            @JsonProperty("from_user")          String username,
            @JsonProperty("text")               String message,
            @JsonProperty("profile_image_url")  String url) {
        this.username = username;
        this.message = message;
        this.image_url = url;
    }
}

这是JSON:

   {
         "created_at":"Wed, 15 Aug 2012 18:17:55 +0000",
         "from_user":"felix_panda",
         "from_user_id":132396774,
         "from_user_id_str":"132396774",
         "from_user_name":"felix suganda",
         "geo":null,
         "id":235802515571101696,
         "id_str":"235802515571101696",
         "iso_language_code":"en",
         "metadata":{
            "result_type":"recent"
         },
         "profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2393214158\/profile_normal.jpg",
         "profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2393214158\/profile_normal.jpg",
         "source":"<a href="http:\/\/www.tweetcaster.com" rel="nofollow">TweetCaster for Android<\/a>",
         "text":"@Android how do u fix you lost your data connection because you left home network with data roaming (cont) http:\/\/t.co\/4coRjaXT",
     "to_user":"Android",
     "to_user_id":382267114,
     "to_user_id_str":"382267114",
     "to_user_name":"Android"

这是我反序列化时得到的错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "created_at"

2 个答案:

答案 0 :(得分:12)

看起来您想要disable FAIL_ON_UNKNOWN_PROPERTIES

答案 1 :(得分:1)

我正在使用MongoJack。以下是我为解决这个问题所做的工作。

    ObjectMapper mapper = new ObjectMapper().setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    MongoJackModule.configure(mapper);
    JacksonDBCollection<Message, Long> coll = JacksonDBCollection.wrap(dbCollection, Message.class, Long.class, mapper);