我正在尝试制作一个Spring Boot应用程序,该应用程序将使用spring-social连接到Fitbit的api。我已经(中途(实现了ConnectionFactory
,它是 Fitbit 的依赖项,并尝试从我的应用程序中使用它。其中一部分涉及启动一个ConnectController
来处理OAuth2"舞蹈"。
当我尝试在http://localhost:8080/connect
或http://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/的"社区项目"部分。