我的春季社交连接控制器有什么问题?



我正在尝试制作一个Spring Boot应用程序,该应用程序将使用spring-social连接到Fitbit的api。我已经(中途(实现了ConnectionFactory,它是 Fitbit 的依赖项,并尝试从我的应用程序中使用它。其中一部分涉及启动一个ConnectController来处理OAuth2"舞蹈"。

当我尝试在http://localhost:8080/connecthttp://localhost:8080/connect/fitbit通过浏览器点击ConnectController时,我被重定向到可白的错误页面,并显示以下消息:

出现意外错误(类型=方法不允许,状态=405(。

不支持请求方法"GET">

真的不明白我所看到的是什么,但是当我设置DEBUG级别日志记录并使用一些断点时,看起来从浏览器点击/connect会导致 Spring 尝试找到名为 connect/status 的东西并点击/connect/fitbit结果在 Spring 尝试找到名为 /connect/fitbitConnect 的东西,然后尝试在内部发出 GET 请求以/connect/connect/fitbitConnect

在这两种情况下,看起来ConnectController对应于/connect的方法和/connect/{providerId}被称为很好,然后当它去寻找所有其他东西时,弹簧炸弹。

这是我正在使用的创建ConnectController bean 的SocialConfigurer实现:

@Configuration
@EnableSocial
@PropertySource("${properties.path}/fitbot-service.properties")
public class SpringSocialConfig implements SocialConfigurer{
    @Override
    public void addConnectionFactories(ConnectionFactoryConfigurer connectionFactoryConfigurer, Environment environment) {
        connectionFactoryConfigurer.addConnectionFactory(new FitbitConnectionFactory(
                environment.getProperty("fitbit.clientId"),
                environment.getProperty("fitbit.clientSecret")
        ));
    }
    @Override
    public UserIdSource getUserIdSource() {
        return new SessionUserIdSource();
    }
    @Override
    public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
        return new InMemoryUsersConnectionRepository(connectionFactoryLocator);
    }
    @Bean
    public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
        return new ConnectController(connectionFactoryLocator, connectionRepository);
    }
}

这到底是怎么回事?我做错了什么?

我相信

这与你关于ConnectController中的GET与POST的问题有关,所以你可能已经自己回答了这个问题。尽管如此,让我澄清一下为什么它正在寻找连接/状态和连接/fitbitConnect。

这些是视图名称。当你对/connect 执行 GET 时,你要求 ConnectController 获取所有提供程序的连接状态并将其放置在模型中,之后它会将该模型转发到逻辑名称为"connect/status"的视图。通常这是路径"/connect/status.jsp"中的JSP,或者可能是"/connect/status.html"处的Thymeleaf模板,但它可以是遵循任何Spring MVC视图解析器规则的任何视图。

同样,对/connect/fitbit 的 GET 请求要求 ConnectController 获取"fitbit"提供程序的连接状态,并将该信息放入模型中,并将其转发到名称为"/connect/fitbitConnect"(如果没有连接(或"/connect/fitbitConnected"(如果有连接(的视图。

除了回答你的问题,我还可以请你告诉我更多关于你的FitBit春天社交提供者项目吗?它是否仿照其他社区主导的春季社会项目?换句话说,它是其他人可能会使用的Spring Social的独立扩展吗?如果是这样,请告诉我它在 GitHub 中的位置,我很乐意将其添加到 http://projects.spring.io/spring-social/的"社区项目"部分。

最新更新