Параметру 1 конструктора необходим обязательный компонент типа 'org.springframework.social.connect.ConnectionRepository', который не может быть найден - PullRequest
2 голосов
/ 26 сентября 2019

Я пытаюсь использовать Spring Social для подключения к Facebook.Это ошибка, которую я получаю:

Description:

Parameter 1 of constructor in Application.Facebook.FacebookController required a bean of type 'org.springframework.social.connect.ConnectionRepository' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.social.connect.ConnectionRepository' in your configuration.

Это учебник, которому я следовал: https://stackabuse.com/how-to-access-the-facebook-api-with-java-and-spring-boot/

Он просто не работает, потому что он дает мне ошибку, упомянутую выше

Я попытался клонировать репо здесь: https://github.com/DavidLandup/HowToAccessFacebookAPIWithSpringBoot, и оно не работает

структура:

main
    +- java
       +- Application
          +- Facebook
             +- FacebookController.java
          +- Application.java

FacebookController.java

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

    private Facebook facebook;
    private ConnectionRepository connectionRepository;

    public FacebookController(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/fb";
        }

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

Application.java

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.6.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile(
            'org.springframework.social:spring-social-core:1.1.6.RELEASE',
            'org.springframework.social:spring-social-facebook:2.0.3.RELEASE',
            'org.springframework.social:spring-social-twitter:1.1.0.RELEASE',
            'org.springframework.boot:spring-boot-starter-web',
            'org.springframework.boot:spring-boot-starter-thymeleaf'
    )
}

Полная ошибка msg:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.6.RELEASE)

2019-09-26 13:20:24.043  INFO 88576 --- [           main]
2019-09-26 13:20:24.047  INFO 88576 --- [           main] Application.Application                  : No active profile set, falling back to default profiles: default
2019-09-26 13:20:25.113  INFO 88576 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-09-26 13:20:25.149  INFO 88576 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-26 13:20:25.149  INFO 88576 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-09-26 13:20:25.286  INFO 88576 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-26 13:20:25.286  INFO 88576 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1194 ms
2019-09-26 13:20:25.384  WARN 88576 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'facebookController' defined in file [/Users/user/Social_Media_Integration/backend/out/production/classes/Application/Facebook/FacebookController.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.social.connect.ConnectionRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2019-09-26 13:20:25.388  INFO 88576 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-09-26 13:20:25.401  INFO 88576 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-09-26 13:20:25.586 ERROR 88576 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of constructor in Application.Facebook.FacebookController required a bean of type 'org.springframework.social.connect.ConnectionRepository' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.social.connect.ConnectionRepository' in your configuration.

1 Ответ

0 голосов
/ 27 сентября 2019

Похоже, что в Spring Boot 2 они удалили FacebookAutoConfiguration configurer из зависимости spring-boot-autoconfigure, поэтому, если вы хотите включить это (и выполнить весеннюю настройку необходимых bean-компонентов), вы должны определить SocialConfigurer :

@Configuration
public class SocialConfig implements SocialConfigurer {

    @Value("${spring.social.facebook.appId}")
    private String appId;
    @Value("${spring.social.facebook.appSecret}")
    private String appSecret;

    @Override
    public void addConnectionFactories(final ConnectionFactoryConfigurer cfConfig, final Environment env) {
        cfConfig.addConnectionFactory(new FacebookConnectionFactory(appId, appSecret));
    }

    @Override
    public UserIdSource getUserIdSource() {
        return new SessionUserIdSource();
    }

    @Override
    public UsersConnectionRepository getUsersConnectionRepository(final ConnectionFactoryLocator connectionFactoryLocator) {
        return new InMemoryUsersConnectionRepository(connectionFactoryLocator);
    }
}

И добавьте аннотацию @ EnableSocial в класс приложения:

@EnableSocial
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Вот последняя документация весны(хотя в ней, похоже, отсутствует некоторая информация, и она содержит неработающую ссылку на Spring Social):

https://docs.spring.io/spring-social-facebook/docs/2.0.3.RELEASE/reference/htmlsingle/

Также в вашем контроллере вы, кажется, автоматически подключаете объект Facebook.Где-то в вашем коде есть определение bean-компонента или где оно создается?В официальной документации, на которую я ссылался выше, в следующем примере кода показано создание объекта Facebook в виде шаблона Facebook, например:

String accessToken = "f8FX29g..."; // access token received from Facebook after OAuth authorization
Facebook facebook = new FacebookTemplate(accessToken);

Обновление: Я добавил тестовый проект на github.Если вы укажете свой appId и secretId в application.properties, он должен работать (в настоящее время я реализовал только список каналов) https://github.com/gybandi/facebooktest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...