2012-10-28 39 views
4

我试图覆盖Spring社会的默认行为重定向到“connect/{providerId}连接”一旦连接到提供者(Twitter,Facebook等)。覆盖默认的重定向视图在春季社交

所以我想通过重写方法保护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; 
    } 

} 

见控制器类的文档:http://static.springsource.org/spring-social/docs/1.0.x/api/org/springframework/social/connect/web/ConnectController.html

,但我得到了以下错误:

Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'org.springframework.social.connect.web.ConnectController#0' bean method public org.springframework.web.servlet.view.RedirectView org.springframework.social.connect.web.ConnectController.connect(java.lang.String,org.springframework.web.context.request.NativeWebRequest) to {[/connect/{providerId}],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'customConnectController' bean method public org.springframework.web.servlet.view.RedirectView org.springframework.social.connect.web.ConnectController.connect(java.lang.String,org.springframework.web.context.request.NativeWebRequest) mapped.

任何人都可以请指导。 我要求如下:1。 用户后连接社交帐户(推特,脸谱等) 2.做一些业务逻辑 3.重定向到/富/酒吧

页请帮助。

回答

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> 
+0

感谢您自己的答案,我试图找出如何使用JavaConfig +春天开机做,但不能使它工作 – gribo

0

那么你所做的一切都是正确的,但忘了添加

@RequestMapping("/connect") 

如果你与春天开机工作,并没有和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