使用参数将Spring MVC RedirectView转换为AngularJS URL

时间:2015-02-10 21:47:35

标签: java angularjs spring spring-mvc

我尝试将用户重定向到AngularJS样式网址:

http://somedomain.com/#/oauth/authorize

我有一些参数我通过我的模型添加到URL。到目前为止,如此标准。直到Spring MVC在第400行的RedirectView内进行了一次黑暗而险恶的转弯。如果你点击该链接,你会看到评论:

// Append anchor fragment, if any, to end of URL.

没有!这对AngularJS来说并不好!这将使我通常漂亮的重定向:

http://somedomain.com/#/oauth/authorize?query=params

看起来像:

http://somedomain.com/?query=params#/oauth/authorize

这是糟糕的juju!

所以我有两个问题:

  1. 锚和查询参数的这种安排的用途是什么。
  2. 我如何规避这种恶魔般的机器?
  3. 感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我觉得我这样做之后需要洗澡,但这是一个可能的解决方案。

在创建配置app.js的模块之前,立即将其放入主脚本(即$routeProvider)。

var urlLoaded = window.location.href;
var qIndex = urlLoaded.indexOf('?');
var hashIndex = urlLoaded.indexOf('#');

if (qIndex !== -1 && hashIndex !== -1 && qIndex < hashIndex) {

    var correctedPath = urlLoaded.substring(hashIndex);
    var correctedParams = urlLoaded.substring(qIndex, hashIndex);
    var base = urlLoaded.substring(0, qIndex);
    var correctedUrl = base + correctedPath + correctedParams;

    window.location.href = correctedUrl;
}

答案 1 :(得分:0)

  • 如果您处于早期阶段,我会考虑使用HTML5 pushState。通过这种方式,你可以像使用它们一样使用锚点,而你的网址看起来会更清晰。这方面存在浏览器限制以及其他注意事项,但正确使用它可能会节省您再次运行的时间。

  • 您可以扩展此类,覆盖该方法,并将其修复为比当前更智能。将它注册为spring(可能需要几个覆盖,查看ViewControllerRegistry),如果感觉不错,请提交Pull Request并查看是否需要它。

  • 以@hartz1989建议的方式将该网址重新提交回提交

  • 您可以使用具有重定向网址的查询参数进行回复,而不是进行重定向,并添加处理角度的处理程序并理解“重定向”。我真的不喜欢这个想法,但这是另一个想法。