与AngularJS配置Spring MVC(Configure Spring MVC with A

2019-08-05 05:45发布

我想能够使用Spring MVC的REST作为服务器和AngularJS在客户端。

我有几个REST的网址:

  • / REST /产品
  • / REST /产品/ {ID}

而我对UI几个网址:

  • /店/产品
  • /店/产品/ {ID}

既然是AngularJS该做的伎俩在客户端,我只是希望能够给所有的默认UI的URL(而不是其他的)重定向到AngularJS使用的index.html文件。

因此,在Spring MVC的配置,我想能够做这样的事情:

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.mypackage.web")
public class WebAppConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/**").setViewName("index");
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/");
        resolver.setSuffix(".html");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

就这样,我要委派所有UI的URL处理,以AngularJS。

我也想,如果用户在浏览器中写入一个坏网址他会受到Spring MVC中的index.html文件重定向,这将是AngularJS将做错误的UI页面上的重定向。 我已经看到了一个index.html文件在网络上几个项目,但没有人处理此错误情况。

我一直在挣扎了很多时间试图做这一招,但我不能找到一个解决方案。

所以我的问题是:我怎么能做到这一点? 更一般地,我错了这个春天MVC-AngularJS想要配置?

非常重要的是:我用Spring MVC的3.2和Tomcat 7.34无的web.xml(完整的Servlet 3.0)

非常感谢。

Answer 1:

也许有可能通过解决其$ routeProvider :

$routeProvider.when('/redirect/:redirectParams', {templateUrl: 'partials/homePartial', controller: redirectController});
$routeProvider.when('/home', {templateUrl: 'partials/homePartial', controller: homeController});
$routeProvider.when('/someRoute', {templateUrl: 'partials/somePartial', controller: someController});
$routeProvider.when('/error/', {templateUrl: 'partials/errorPartial', controller: errorController});
$routeProvider.when('/error/:errorMessage', {templateUrl: 'partials/errorPartial', controller: errorController});
$routeProvider.otherwise({redirectTo: '/error'})

只是让$routeProvider重定向到一个错误页面时未发现的行车路线。

编辑:

我已在上面的示例中redirectController。 该控制器将读取$routeParams ,在这种情况下$routeParams.redirectParams和使用$位置改变到路由/error

春天只是重定向到http://host:port/index.html/#/redirect/error=blabla 。 你可以和应该可能微调这一点,并支持多种routeParams。

在Spring中,你将有三个基本要求的映射 :

  • REST请求映射
  • index.html的请求映射
  • 其它URL请求映射

重定向所有其他请求:

@RequestMapping(value = "{path}", method = RequestMethod.GET)
public String redirect(@PathVariable String path) {
   String route = null;
   if (path.equals("/") || path.startsWith("/index.html")) {
     // load index.html
   } else {
     route = "redirect:/index.html/#/redirect/" + path; 
   }
   return route;
}


Answer 2:

我想你可以写一个拦截器 ,它允许像/ REST /,/资源/,/ webjars / *和任何其他的URL重定向到index.html的一些已知的URL。



Answer 3:

尝试使用urlrewritefilter

这应该为你做的工作。 你必须配置/在你的web.xml将它添加到每个URL将被处理,你可以操纵它重定向到的index.html



Answer 4:

我知道晚了一点,但如果有人遇到同样的问题在这里我们把URL过滤器样品在classpath urlwrite.xml

您可以设置要过滤某些URL重定向。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">

<!-- Configuration file for UrlRewriteFilter http://www.tuckey.org/urlrewrite/ -->

<urlrewrite>

    <rule>
        <note>
            The rule means that requests to /test/status/ will be redirected
            to
            /rewrite-status
            the url will be rewritten.
        </note>
        <from>/index.ipxs/directory</from>
        <to type="redirect">/index.ipxs/marketplace</to>

    </rule>
    <rule>
        <from>/index.ipxs/faq</from>
        <to type="redirect">/index.ipxs/marketplace</to>
    </rule>
    <rule>
        <from>/index.ipxs/marketplace</from>
        <to type="redirect">/iPlexus/index.ipxs</to>
    </rule>

</urlrewrite>


文章来源: Configure Spring MVC with AngularJS