복붙노트

[SPRING] Spring Social 3.0.0.M1의 org.springframework.social.connect.ConnectionRepository 클래스는 어떻게 되었습니까?

SPRING

Spring Social 3.0.0.M1의 org.springframework.social.connect.ConnectionRepository 클래스는 어떻게 되었습니까?

저는 Spring Framework 초보자이며 Facebook에서 데이터를 가져 오는 간단한 웹 애플리케이션을 만들기 위해 Spring Social을 사용해보고 싶었습니다. 이를 위해 나는 Spring Socials의 공식 "Getting Getting Guide"인 "Facebook 데이터 액세스"를 따랐습니다.

내가 만난 첫번째 문제는 스프링 소셜의 최신 공식 버전 인 2.0.3.RELEASE는 페이스 북 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.HelloController]의 Bean 클래스 [hello.HelloController]에 선언 된 생성자가 해결되지 않았습니다. 중첩 예외는 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. ==============================

    1.GitHub에서 얻은 artifact spring-social-facebook에 대한 소스 코드의 git 히스토리를 살펴본 후에 ConnectionRepository에 대한 흔적을 전혀 찾을 수 없었다.

    GitHub에서 얻은 artifact spring-social-facebook에 대한 소스 코드의 git 히스토리를 살펴본 후에 ConnectionRepository에 대한 흔적을 전혀 찾을 수 없었다.

    mvnrepository.com에서 체크 아웃 한 후 버전 2.0.3.RELEASE의 artifact spring-social-facebook을 의존성으로 사용할 때 훨씬 더 많은 jar-file이 버전 3.0.0을 사용하는 것보다 Maven에 의해 dowloaded되었음을 알게되었습니다. M1은 의존성입니다. 누락 된 jar-filer 중에는 응용 프로그램을 설치하고 실행하는 데 필요한 두 개의 유물이있었습니다. 그들은 봄 - 사회 - 핵심 및 봄 - 사회 - 구성되었습니다.

    결국 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>
    

    이러한 변경으로 인해 애플리케이션을 시작하고 일부 페이스 북 데이터를 검색 할 수있었습니다.

  2. from https://stackoverflow.com/questions/42168663/what-has-happened-with-the-class-org-springframework-social-connect-connectionre by cc-by-sa and MIT license