Что случилось с классом org.springframework.social.connect.ConnectionRepository в Spring Social 3.0.0.M1?

Я новичок в Spring Framework и хотел попробовать Spring Social, чтобы создать простое веб-приложение, которое извлекает данные из Facebook. Для этого я следовал официальному «Руководству по началу работы» Spring Socials под названием «Доступ к данным Facebook».

Первая проблема, с которой я столкнулся, заключалась в том, что версия Spring Social 2.0.3.RELEASE, которая кажется последней официальной версией Spring Social, не поддерживает API facebook версии 2.8 (и поэтому дает мне следующая ошибка: "(#12) биополе устарело для версий v2.8 и выше"). Поскольку вчера я создал приложение Facebook на сайте developer.facebook.com, похоже, у меня нет доступа к предыдущим версиям API.

Я искал решение в Google и обнаружил, что версия 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: не удалось разрешить объявленные конструкторы класса компонента [hello.HelloController] из ClassLoader [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)


Изучив историю git исходного кода артефакта spring-social-facebook, которую я получил с GitHub, я вообще не смог найти никаких следов ConnectionRepository. .

После проверки на mvnrepository.com я понял, что при использовании версии 2.0.3.RELEASE артефакта spring-social-facebook в качестве зависимости гораздо больше jar-файлов где загружается Maven, чем при использовании версии 3.0.0.M1 в качестве зависимости. Среди отсутствующих jar-файлов было два артефакта, которые мне понадобились для запуска моего приложения. Это были spring-social-core и spring-social-config.

В конце концов я нашел ConnectionRepository в jar-файле spring-social-core.

Итак, что мне в конце концов нужно было сделать, так это изменить зависимости в исходном 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>

to:

<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.

person eternitysharp    schedule 11.02.2017
comment
Очень поучительно. Я узнал, что 3.0.0.M1 находится в репозитории Spring Milestones, поэтому мне пришлось сначала добавить это в мой pom: <repositories> <repository> <id>Spring Milestones Repository</id> <url>http://repo.spring.io/milestone/</url> </repository> </repositories> - person Richard Osseweyer; 08.03.2018