我试图覆盖Spring Social的默认行为,一旦连接到提供商(Twitter,Facebook等),就会重定向到“connect / {providerId} Connected”。
所以我试图通过覆盖方法来覆盖默认行为 protected java.lang.String connectedView(java.lang.String providerId)
所以我已经将ConnectController子类化并尝试覆盖:
@Controller
public class CustomConnectController extends ConnectController{
@Inject
public CustomConnectController(
ConnectionFactoryLocator connectionFactoryLocator,
ConnectionRepository connectionRepository) {
super(connectionFactoryLocator, connectionRepository);
}
@Override
protected String connectedView(String providerId){
//Do some logic
return "redirect:/foo/bar;
}
}
但是我收到以下错误:
引起:java.lang.IllegalStateException:找到不明确的映射。 无法映射 'org.springframework.social.connect.web.ConnectController#0'bean 方法public org.springframework.web.servlet.view.RedirectView org.springframework.social.connect.web.ConnectController.connect(java.lang.String中,org.springframework.web.context.request.NativeWebRequest) 至 {[/连接/ {providerId}],方法= [POST],则params = [],标题= [],消耗= [],产生= [],定制= []}: 已经有'customConnectController'bean方法公开了 org.springframework.web.servlet.view.RedirectView org.springframework.social.connect.web.ConnectController.connect(java.lang.String中,org.springframework.web.context.request.NativeWebRequest) 映射。
任何人都可以指导。 我的要求如下: 1.用户连接社交帐户(Twitter,Facebook等)后 2.做一些业务逻辑 3.重定向到/ foo / bar页面
请帮忙。
答案 0 :(得分:7)
好的,我自己找到了解决方案。 为每个人发布答案,以便任何挣扎于愚蠢事情的人都可能受益:
实际上我在配置和配置中配置了ConnectController。现在,自定义控制器正在踩着那个&因此它说已经映射了。从配置中删除配置可以解决问题。
在我的情况下删除以下代码:
<bean class="org.springframework.social.connect.web.ConnectController">
relies on by-type autowiring for the constructor-args
<property name="applicationUrl" value="${application.url}" />
</bean>
答案 1 :(得分:0)
嗯,你已经做好了一切,但忘了添加
@RequestMapping("/connect")
如果您正在使用Spring启动并且没有和spring-config.xml文件,则可以使用以下代码。
这段代码为我做了伎俩
@Controller
@RequestMapping("/connect")
public class ChangeDefaultFlowController extends ConnectController {
public ChangeDefaultFlowController(ConnectionFactoryLocator connectionFactoryLocator,
ConnectionRepository connectionRepository) {
super(connectionFactoryLocator, connectionRepository);
}
@Override
protected String connectedView(String providerId) {
return "redirect:/"+providerId;
}
}
This Link offers more explanation on changing the redirect flow to page or another rest controller