Spring Social 3.0.0.M1中的类org.springframework.social.connect.ConnectionRepository发生了什么?

时间:2017-02-10 21:05:05

标签: spring facebook-graph-api spring-social spring-social-facebook facebook-graph-api-v2.8

我是Spring Framework的初学者,想尝试使用Spring Social制作一个简单的Web应用程序,从Facebook检索数据。为此我遵循了Spring Socials官方的“入门指南”,名为“访问Facebook数据”。

我遇到的第一个问题是Spring Social版本 2.0.3.RELEASE ,它似乎是Spring Social的最新官方版本,不支持facebook API的2.8版(和因此给出了以下错误:“(#12)生物字段已被弃用,版本为v2.8及更高版本”)。由于我昨天在developers.facebook.com创建了Facebook应用程序,似乎我无法访问以前的API版本。

我在谷歌搜索了一个解决方案,发现版本 3.0.0.M1 似乎可以在maven存储库中使用,这应该可以解决这个问题。但是当我更改.pom文件中的配置以使用此版本时,编译器再也找不到类 ConnectionRepository 了。实际上整个包 org.springframework.social.connect 似乎都缺失了。

我从指南(https://spring.io/guides/gs/accessing-facebook/)复制的代码如下所示:

import org.springframework.social.connect.ConnectionRepository;
import org.springframework.social.facebook.api.Facebook;
import org.springframework.social.facebook.api.PagedList;
import org.springframework.social.facebook.api.Post;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

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

    private Facebook facebook;
    private ConnectionRepository connectionRepository;

    public HelloController(Facebook facebook, ConnectionRepository connectionRepository) {
        this.facebook = facebook;
        this.connectionRepository = connectionRepository;
    }

    @GetMapping
    public String helloFacebook(Model model) {
        if (connectionRepository.findPrimaryConnection(Facebook.class) == null) {
            return "redirect:/connect/facebook";
        }

        model.addAttribute("facebookProfile", facebook.userOperations().getUserProfile());
        PagedList<Post> feed = facebook.feedOperations().getFeed();
        model.addAttribute("feed", feed);
        return "hello";
    }

}

是否弃用了ConnectionRepository,现在已将其删除?如果是这种情况,我应该使用其他东西吗?或者我错过了什么?

只需删除对ConnectionRepository的所有引用,就会在启动应用程序时出现以下错误:

org.springframework.beans.factory.BeanCreationException:创建名为'helloController'的bean时出错:来自ClassLoader的bean类[hello.HelloController]上声明的构造函数的解析[sun.misc.Launcher$AppClassLoader@73d16e93]失败;嵌套异常是java.lang.NoClassDefFoundError:org / springframework / social / ApiBinding

在这种情况下,代码如下所示:

package hello;

import org.springframework.social.facebook.api.Facebook;
import org.springframework.social.facebook.api.PagedList;
import org.springframework.social.facebook.api.Post;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

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

    private Facebook facebook;

    public HelloController(Facebook facebook) {
        this.facebook = facebook;

    }

    @GetMapping
    public String helloFacebook(Model model) {


        model.addAttribute("facebookProfile", facebook.userOperations().getUserProfile());
        PagedList<Post> feed = facebook.feedOperations().getFeed();
        model.addAttribute("feed", feed);
        return "hello";
    }

}

1 个答案:

答案 0 :(得分:9)

在查看我从GitHub获取的工件 spring-social-facebook 的源代码的git历史记录后,我找不到任何 ConnectionRepository 完全没有。

在mvnrepository.com上查看后,我意识到当使用 spring-social-facebook 工件的 2.0.3.RELEASE 作为依赖时更多Maven下载的jar文件比使用 3.0.0.M1 版本作为依赖项时使用的文件。丢失的jar文件管理器中有两个工件,我需要启动并运行我的应用程序。他们是 spring-social-core spring-social-config

最后,我在 spring-social-core jar文件中找到了 ConnectionRepository

所以我最终需要做的是从指南中更改原始pom文件中的依赖项,如下所示:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
    </dependency>
</dependencies>

为:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
        <version>3.0.0.M1</version>
        </dependency>
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-core</artifactId>
        <version>2.0.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-config</artifactId>
        <version>2.0.0.M2</version>
    </dependency>
</dependencies>

这些更改允许我启动应用程序并检索一些Facebook数据。