我正在尝试制作一个Spring Boot应用程序,它将使用spring-social连接到Fitbit的api。我(中途)实现了一个ConnectionFactory
,它是Fitbit的依赖项,我正试图从我的应用程序中使用它。部分原因是启动ConnectController
来处理OAuth2“舞蹈”。
当我尝试通过浏览器ConnectController
或http://localhost:8080/connect
点击http://localhost:8080/connect/fitbit
时,我会被重定向到whitelable错误页面并显示以下消息:
出现意外错误(type = Method Not Allowed,status = 405)。
请求方法'GET'不受支持
我真的不明白我所看到的内容,但是当我设置DEBUG
级别日志记录并使用一些断点时,看起来好像从浏览器中点击/connect
导致Spring试图找到一个名为connect/status
并点击/connect/fitbit
会导致春天尝试找到名为/connect/fitbitConnect
的内容,然后尝试在内部向/connect/connect/fitbitConnect
发出GET请求。
在这两种情况下,看起来ConnectController
对应/connect
和/connect/{providerId}
的方法被称为罚款,然后弹簧炸弹寻找所有其他东西时。
以下是我正在使用的SocialConfigurer
实现,它创建了ConnectController
bean:
@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);
}
}
这到底是怎么回事?我究竟做错了什么?
答案 0 :(得分:1)
我认为这与你在ConnectController中关于GET与POST的问题有关,所以你可能已经自己回答了这个问题。尽管如此,让我澄清为什么它正在寻找连接/状态和连接/ fitbitConnect。
这些是视图名称。当您执行GET for / connect时,您要求ConnectController获取所有提供程序的连接状态并将其放入模型中,之后它会将该模型转发到逻辑名称为“connect / status”的视图。通常这是路径“/connect/status.jsp”中的JSP或“/connect/status.html”上的Thymeleaf模板,但它可以是遵循任何Spring MVC视图解析器的规则的任何视图。
同样,对/ connect / fitbit的GET请求要求ConnectController获取“fitbit”提供程序的连接状态,并将该信息放在模型中并将其转发到名称为“/ connect / fitbitConnect”的视图(如果没有连接)或“/ connect / fitbitConnected”(如果有连接)。
除了回答您的问题之外,我还可以请求您告诉我有关您的FitBit Spring社交服务提供商项目的更多信息吗?它是否模仿其他社区主导的Spring Social项目?换句话说,它是其他人可能使用的Spring Social的独立扩展吗?如果是这样,请告诉我它在GitHub中的位置,我很乐意将其添加到http://projects.spring.io/spring-social/的“社区项目”部分。