Что произошло с классом 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, не поддерживает версию 2.8 API Facebook (и поэтому выдает следующую ошибку: " (# 12) био поле не рекомендуется для версий v2.8 и выше "). Поскольку вчера я создал приложение Facebook на developers.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: Ошибка при создании bean-компонента с именем 'helloController': не удалось разрешить объявленные конструкторы в bean-классе Class [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. М1 как зависимость. Среди отсутствующих jar-filer были два артефакта, которые мне понадобились для запуска и запуска моего приложения. Они были 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>
чтобы:
<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.