当前位置: 首页 > 知识库问答 >
问题:

无法在Facebook API中检索好友:Spring Social

盖雪峰
2023-03-14

我正在尝试检索一个使用Spring Social Facebook的用户的朋友名。列表friends=facebook.friendoperations().getfriendprofiles();这个语句给了我一个400错误的请求错误。

@Controller
@RequestMapping("/")
public class HelloController {

    private Facebook facebook;

    @Inject
    public HelloController(Facebook facebook) {
        this.facebook = facebook;
    }

    @RequestMapping(method=RequestMethod.GET)
    public String helloFacebook(Model model) {
        if (!facebook.isAuthorized()) {
            return "redirect:/connect/facebook";
        }

        model.addAttribute(facebook.userOperations().getUserProfile());
        System.out.println(facebook.userOperations().getUserProfile().getName());
        System.out.println(facebook.userOperations().getUserProfile().getEmail());
        //PagedList<FacebookProfile> fbFrnds = facebook.friendOperations().getFriendProfiles();
        List<String> friendIds = facebook.friendOperations().getFriendIds();
        System.out.println("Id size : "+friendIds.size());
        List<FacebookProfile> friends = facebook.friendOperations().getFriendProfiles();
        System.out.println("Size : "+friends.size());
        for (FacebookProfile id : friends) {
            System.out.println(id.getName());
        }
        return "hello";
    }

}

错误如下所示。

2014-10-20 16:39:34.787  WARN 4648 --- [nio-8080-exec-6] o.s.web.client.RestTemplate              : GET request for "https://graph.facebook.com/v1.0/me/friends?fields=id%2Cusername%2Cname%2Cfirst_name%2Clast_name%2Cgender%2Clocale%2Ceducation%2Cwork%2Cemail%2Cthird_party_id%2Clink%2Ctimezone%2Cupdated_time%2Cverified%2Cabout%2Cbio%2Cbirthday%2Clocation%2Chometown%2Cinterested_in%2Creligion%2Cpolitical%2Cquotes%2Crelationship_status%2Csignificant_other%2Cwebsite" resulted in 400 (Bad Request); invoking error handler
{"error":{"message":"(#100) Unknown fields: username.","type":"OAuthException","code":100}}
2014-10-20 16:39:34.814 ERROR 4648 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.social.UncategorizedApiException: (#100) Unknown fields: username.] with root cause

org.springframework.web.client.HttpClientErrorException: 400 Bad Request
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleUncategorizedError(FacebookErrorHandler.java:155)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:68)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:598)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:556)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:527)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:259)
    at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchConnections(FacebookTemplate.java:222)
    at org.springframework.social.facebook.api.impl.FriendTemplate.getFriendProfiles(FriendTemplate.java:135)
    at org.springframework.social.facebook.api.impl.FriendTemplate.getFriendProfiles(FriendTemplate.java:102)
    at hello.HelloController.helloFacebook(HelloController.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

知道为什么会这样吗?提前谢了。

共有1个答案

戈正初
2023-03-14

不幸的是,Facebook在Graph API的V2.0中删除了“username”属性。因此,Spring Social Facebook将无法获得该资产。(如果这让你感到沮丧,那么想象一下当我发现他们在削减了一个Spring社交Facebook发布版几天后才删除它时,我的沮丧。)

如果您将Spring Social Facebook依赖项更改为2.0.0.M1(并确保在html" target="_blank">构建中注册了Spring的里程碑存储库http://repo.Spring.io/milestone),那么它应该对您有效。事实上,如果您尝试这个版本并向https://jira.spring.io/browse/socialfb报告bug或改进意见,我将非常感激。

但也要注意,Facebook的Graph API现在限制了应用程序可以获取的朋友。具体地说,Graph API只会返回用户朋友的列表,如果这些朋友也是您的应用程序的用户。我不确定这是否能满足你的需求,但这都是由于Facebook端的变化...在Spring Social中我对此无能为力。

 类似资料:
  • 新的2.0版本有一个分页,限制一个请求的朋友数量,这不允许我一次检索所有朋友,尽管有一个参数调用“limit”,它只能通过循环“偏移量”直到最后来完成。问题是每个用户都有不同数量的朋友! 我已经四处寻找了几个小时,但仍然没有解决方案。

  • 我认为这是一个极其简单的问题,但我所有解决它的尝试都失败了。 简而言之:我有一个JSP文件,其中的表单调用Java Servlet。servlet处理输入并返回一个变量(属性),然后重定向回同一个jsp。我想让jsp使用JavaScript而不是scriptlet来处理返回的属性。 JSP代码(test.jsp): 以及Servlet代码: 我认为问题源于我对会话变量的声明: 我也尝试过: 以及:

  • 问题内容: MVC4 +实体框架4.4 + MySql + POCO /代码优先 我正在设置以上配置..这是我的课程: 这是我的web.config设置… 数据库AND表已经存在… 我对mvc还是很陌生,但是正在使用本教程 应用程序构建良好…但是,当我尝试使用Product(BTD.Data)作为我的模型类并使用BTDContext(BTD.DataContext)作为我的数据上下文类添加控制器时

  • 脚本: 超文本标记语言: 我试图获取的文本与帐单地址相同。我也尝试过使用getText(),但没有返回任何结果。

  • 问题内容: 我有一个MySQL数据库,其中存储了每个用户的数据。 我想为每个用户添加一个朋友列表。我应该为数据库中的每个用户创建一个朋友表还是有更好的方法? 问题答案: 假设所有朋友也都在用户表中,则需要一个朋友表,该表定义了简单的一对多关系-将用户表链接回自身。所以 其中UserIDLink1和UserIDLink2都是Users表上的外键。 例如,如果我有三个用户 并且Joe和Jane是朋友,

  • 我正在使用和版本27,在上一个版本中,我为我的项目使用了新的字体资源功能,但一天后,这行代码出现了3次崩溃 崩溃报告说这是因为android。所容纳之物无法检索res.Resources$NotFoundException和字体资源。所有3次崩溃都发生在android版本为5.1.1的用户身上。这是支持库中的错误还是我做错了什么?