Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Facebook模板将获取对象映射到页面列表_Java_Spring_Spring Social_Kotlin_Spring Social Facebook - Fatal编程技术网

Java Spring Facebook模板将获取对象映射到页面列表

Java Spring Facebook模板将获取对象映射到页面列表,java,spring,spring-social,kotlin,spring-social-facebook,Java,Spring,Spring Social,Kotlin,Spring Social Facebook,我使用以下方法返回Facebook用户的音乐偏好: //FIXME: Fetch results in a single operation val likes = facebook.likeOperations().music val artists = ArrayList<Artist>() for (musicLiked in likes) { val musicProfile = facebook.fetchObject(musicLiked.id, Page::cl

我使用以下方法返回Facebook用户的音乐偏好:

//FIXME: Fetch results in a single operation
val likes = facebook.likeOperations().music
val artists = ArrayList<Artist>()
for (musicLiked in likes)
{
    val musicProfile = facebook.fetchObject(musicLiked.id, Page::class.java, "id", "name", "genre");
    artists.add(Artist(name = musicProfile.name, genre = musicProfile.genre))
}
//FIXME:在单个操作中获取结果
val likes=facebook.likeOperations().music
val artists=ArrayList()
对于(喜欢音乐的人)
{
val musicProfile=facebook.fetchObject(musicLiked.id,Page::class.java,“id”,“name”,“genre”);
添加(艺术家(名称=musicProfile.name,流派=musicProfile.genre))
}
上述方法无法扩展,因为我们为用户喜欢的每个艺术家提供了额外的网络操作

我试过:

我试着使用
facebook.likeOperations.music
,但这并不能获取流派

问题:

我想将
facebook.fetchObject
与返回
页面列表的查询一起使用。如何做到这一点

(如果您更喜欢或更熟悉Java,无需在Kotlin中发布示例代码-我很乐意提供任何语言的信息)

Facebook api在请求中使用“字段”参数为对象返回自定义字段。此参数也可用于音乐休息请求



    me/music?fields=id,genre,name

上面的链接将返回所有喜欢的音乐,包括id、流派和艺术家/团体的名称。不幸的是,FacebookTemplate没有适合您需要的方法。该方法返回类的实例,该类具有值为的常量PAGE_字段



    private static final String PAGE_FIELDS = "id,name,category,description,location,website,picture,phone,affiliation,company_overview,likes,checkins";

在上述常量中,您没有类型字段。所以你有两种方法:

  • 您可以简单地将facebook rest api与一些rest库一起使用
  • 您可以重写FacebookTemplate,并通过likeOperations()方法返回自己的实现。LikeTemplate类的实现在提到的常量中应该有不同的值(在字符串末尾添加了类型字段)

  • 也许有人会更有用,但据我所知,你没有其他选择。

    多亏@burovmarley的回答中给出的建议,我检查了来源并得出:

    val music = facebook.fetchConnections(userPage.id, "music", Page::class.java,
                PagingParameters(25, 0, null, null).toMap(), "id,name,,genre")
    for (musicLiked in music)
    {
        println("likes: ${musicLiked.name}, genre: ${musicLiked.genre}")
    }
    

    这允许使用SpringSocialFacebook作为未经修改的依赖项,并且不发出拉取请求,而拉取请求目前在队列中的处理速度似乎相当慢

    您是否过早地进行了优化?@hd1否,您听说过“n+1选择”吗?这就是问题所在。@ApproxValue听起来不错,但是没有办法调用fetchObject方法并映射到集合而不是单个对象吗?很多查询都返回集合,所以我认为这是可能的,只是因为不熟悉FB模板/kotlin,所以我不知道如何返回集合。现在听起来好像是这样做的。谢谢你的建议。在你的指导下,我想出了一个使用vanila API的解决方案,无需修改。再次感谢您的帮助-非常感谢。@Jasperbluse是否愿意分享?这是唯一正确的答案。应该得到+250的赏金。