覆盖Spring Social中的默认重定向视图

时间:2012-10-28 16:42:08

标签: java spring spring-mvc twitter spring-social

我试图覆盖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;
    }

}

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

但是我收到以下错误:

  

引起: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页面

请帮忙。

2 个答案:

答案 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