【发布时间】:2023-03-30 10:35:01
【问题描述】:
我使用带有Spring Social Facebook 的 FQL 阅读了所有我喜欢的内容
方法如下:
public List<LikeObject> startF(String token){
Facebook facebook = new FacebookTemplate(token);
FacebookProfile profile = facebook.userOperations().getUserProfile();
//System.out.println(facebook.isAuthorized());
System.out.println("Authenticcated user: "+profile.getFirstName()+" "+profile.getLastName());
PagedList<String> friendListIds = facebook.friendOperations().getFriendIds();
List<LikeObject> resultsLikes = facebook.fqlOperations().query("SELECT object_id, object_id_cursor,object_type, post_id, post_id_cursor, user_id "+
"FROM like "+
"WHERE user_id =me() ", new FqlResultMapper<LikeObject>(){
public LikeObject mapObject(FqlResult result) {
LikeObject like = new LikeObject();
like.object_id = result.getString("object_id");
like.object_id_cursor = result.getString("object_id_cursor");
like.object_type = result.getString("object_type");
like.post_id = result.getString("post_id");
like.post_id_cursor = result.getString("post_id_cursor");
like.user_id = result.getString("user_id");
return like;
}
});
return resultsLikes;
}
这里的结果:
LikeObject [object_id=578416.., object_id_cursor=null, object_type=status, post_id=, post_id_cursor=null, user_id=10217..]
然后我想解析 like.object_id 并将其转换为 java 对象。但我不知道如何使用 spring social facebook 来做到这一点。
我试过 facebook.fetchObject(like.object_id, PostType.STATUS) 。但这似乎是一种错误的方式。
是否有任何可能的方法来解析 spring social 中的“object_id”而不解析来自 GET 查询的原始 JSON 响应?
我试过这个:
LinkPost post = facebook.fetchObject(obj_id, LinkPost.class);
我相信 obj_id 有类型 link,我已经检查过了
它会导致以下异常:
Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property 'postType' that is to contain type id (for class org.springframework.social.facebook.api.LinkPost)
at [Source: java.io.ByteArrayInputStream@6ca79a6a; line: 1, column: 11114]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property 'postType' that is to contain type id (for class org.springframework.social.facebook.api.LinkPost)
at [Source: java.io.ByteArrayInputStream@6ca79a6a; line: 1, column: 11114]
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:171)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:163)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:94)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:491)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:460)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:228)
at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:202)
at com.repost.facebook.FbConnection.getLikedPosts(FbConnection.java:58)
at com.repost.facebook.MainClass.main(MainClass.java:15)
【问题讨论】:
-
“解析一个‘object_id’是什么意思?”您是在问是否有办法确定该 id 背后的对象类型?
-
嗨克雷格!我知道对象的类型。在我的示例中,Facebook 将它作为 object_type=status 返回给我。我想通过使用 object_id 给出的参考链接将它解析为 StatusPost 类的对象
标签: java facebook api spring-social