2013-06-03 2 views
0

Я прочитал все мои симпатии, используя FQL с Spring Social FacebookЧитать Facebook Post-связанный объект с весной социальной

здесь метод:

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. Но я не знаю, как это сделать, используя весенний социальный facebook.

Я пробовал facebook.fetchObject(like.object_id, PostType.STATUS). Но это кажется неправильным.

Есть ли какой-либо возможный способ разбора «object_id» весной social без синтаксического анализа ответа JSON из запроса GET?

Я попытался это:

LinkPost post = facebook.fetchObject(obj_id, LinkPost.class); 

Я считаю, что obj_id имеет тип ссылку, я проверил это

и причина за исключением следующего:

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: [email protected]; 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: [email protected]; 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) 
+1

Что значит «разобрать« object_id »?» Вы спрашиваете, есть ли способ определить, какой тип объекта стоит за этим идентификатором? –

+0

Привет Крейг! Я знаю тип объекта. В моем примере Facebook возвращает мне это как object_type = status. Я хотел бы проанализировать его как объект класса StatusPost с помощью ссылки ссылки, заданной object_id –

ответ

2

I «Еще неясно, что вы подразумеваете под« синтаксическим разбором ». Но позвольте мне попытаться ответить на это так или иначе ...

Я думаю, вы просто хотите, чтобы иметь возможность получить объект как объект Post (или LinkPost) ... это правильно? Если это так, то есть какая-то особая магия, которую я, к сожалению, должен был испечь в API, чтобы иметь возможность захватить тип сообщения и, сделать полиморфную десериализацию в определенный тип сообщения (например, LinkPost, StatusPost и т. Д.).

Вы можете увидеть установку, имеющую место в https://github.com/SpringSource/spring-social-facebook/blob/master/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/impl/FeedTemplate.java. В методе deserializePost() вы увидите, что я прочитал свойство type и скопировал его в новое поле postType. Одно из этих полей используется для заполнения свойства типа Post, а другое используется для определения того, какой конкретный подкласс Post должен быть создан. Это взломать проблему, с которой я столкнулся с Jackson 1.9.x ... Я думаю, что Jackson 2 сделает этот взлом ненужным, но я еще не пробовал.

Поэтому я вижу только один практический способ сделать это: не делайте всю работу самостоятельно. Вместо этого используйте facebook.feedOperations(). GetPost (objectId). Он знает, как сделать магию под обложками, чтобы дать вам объект Post. Оттуда, если вы знаете конкретный вид Почты, вы можете использовать его как (и если) для LinkPost, StatusPost и т. Д.

Единственный другой вариант, который я вижу, - это пойти еще ниже и сделать запрос через facebook.restOperations() и обработать привязку для себя. С вашей стороны, очевидно, намного больше работы.

+0

Спасибо! Это точно мой вопрос.Извините за неясность. –

+0

Craig, FYI Я вижу нечто похожее (проблема синтаксического анализа на ответ FB). Мой код пытается отправить ответ на комментарий: CommentOperations co = template.commentOperations(); Строка replyId = co.addComment (commentId, commentResponse); Результатом этого является исключение HttpMessageNotReadableException из класса MappingJackson2HttpMessageConverter. По вашему предложению использовать механизм facebook.restOperations(), я могу обойти эту ошибку, но я хотел сообщить, что я вижу. – Alex

Смежные вопросы