有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Spring Social中重写默认重定向视图

我试图覆盖SpringSocial的默认行为,以便在连接到提供商(Twitter、Facebook等)后重定向到“connect/{providerId}Connected”

因此,我试图通过重写受保护的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.用户连接社交账户(Twitter、Facebook等)后 2.做一些业务逻辑 3.重定向到/foo/bar页面

请帮忙


共 (2) 个答案

  1. # 1 楼答案

    好的,我自己找到了解决办法。 为每个人发布答案,以便任何与愚蠢的事情斗争的人都可能受益:

    实际上,我在配置中配置了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> 
    
  2. # 2 楼答案

    好吧,你做的每件事都是对的,但你忘了补充

        @RequestMapping("/connect")
    

    如果您使用的是Spring boot,并且没有和Spring配置。您可以使用以下代码的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