我正在尝试将twitter4j状态对象保存到Mongodb。我有以下代码:
public void saveTweets(Status status) throws Exception {
BasicDBObject tweet = new BasicDBObject();
tweet.put("tweet_id", status.getId());
tweet.put("user", status.getUser());
tweet.put("text", status.getText());
tweet.put("location", status.getGeoLocation());
tweet.put("place", status.getPlace());
tweet.put("created_at", status.getCreatedAt());
tweet.put("contributors", status.getContributors());
tweet.put("hashtag_entities", status.getHashtagEntities());
tweet.put("media_entities", status.getMediaEntities());
tweet.put("user_mention_entities", status.getUserMentionEntities());
tweet.put("url_entities", status.getURLEntities());
tweet.put("source", status.getSource());
tweet.put("retweeted_status", status.getRetweetedStatus());
tweet.put("retweeted_count", status.getRetweetCount());
tweet.put("count", 0);
tweetsDAO.saveToDB(tweetsCollectionName, tweet);
}
但这是抛出以下异常:
java.lang.IllegalArgumentException: can't serialize class twitter4j.internal.json.UserJSONImpl
at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:270)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:174)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:120)
at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27)
at com.mongodb.OutMessage.putObject(OutMessage.java:289)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:239)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:204)
at com.mongodb.DBCollection.insert(DBCollection.java:76)
at com.mongodb.DBCollection.insert(DBCollection.java:60)
at com.mongodb.DBCollection.insert(DBCollection.java:105)
似乎我需要更多地进入状态对象并为返回的每个实体分别使用BasicDBObject。但这是一项相当大的任务,因为几乎所有的status.get ***调用都会返回另一个具有一组字段的twitter4j实体。
有没有更好的方法来做到这一点?
感谢。
答案 0 :(得分:0)
twitter4j的Status对象有User对象,可以访问bu getUser()。因此,当您尝试通过调用 status.getUser()来设置用户时,您会放置一个类而不是字符串,整数等。
您可以为您的用户调用任何方法,例如 status.getUser()。getId(),或根据您的收藏品设计引用用户收藏。
答案 1 :(得分:0)
您可以将状态作为JSON字符串获取,然后将其解析为DBObject,如下所示:
import twitter4j.json.DataObjectFactory;
import com.mongodb.util.JSON;
public void saveTweets(Status status) throws Exception {
String tweet = DataObjectFactory.getRawJSON(status);
DBObject doc = (DBObject)JSON.parse(tweet);
tweetsDAO.saveToDB(tweetsCollectionName, doc);
}