spring-mvc - 使用 AngularJS 配置 Spring MVC

标签 spring-mvc angularjs tomcat7

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

我有几个 REST 网址:

  • /休息/产品
  • /rest/products/{id}

  • 我有几个 UI 网址:
  • /商店/产品
  • /shop/products/{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 处理委托(delegate)给 AngularJS。

    我还希望如果用户在浏览器中写入错误的 url,他将被 Spring MVC 在 index.html 文件上重定向,它将是 AngularJS,它将在错误 ui 页面上进行重定向。我在网上看到过几个项目,只有一个 index.html 文件,但没有人处理这种错误情况。

    我一直在努力尝试这个技巧,但我找不到解决方案。

    所以我的问题是:我该怎么做?更一般地说,我对这个 Spring MVC-AngularJS 想要的配置有错吗?

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

    非常感谢。

    最佳答案

    或许可以通过 $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。此 Controller 将读取 $routeParams , 在这种情况下 $routeParams.redirectParams并使用 $location将路线更改为 /error .

    Spring 只是重定向到 http://host:port/index.html/#/redirect/error=blabla .您可以而且应该对此进行微调并支持多个 routeParams。

    在 Spring ,你基本上会有三个 request mappings :
  • REST request mapping
  • 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;
    }
    

    关于spring-mvc - 使用 AngularJS 配置 Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112146/

    相关文章:

    java - 将 Spring MVC 与 html 结合使用

    javascript - 单击按钮时在模式内显示 div

    html - 在 AngularJS 中如何使用数据列表

    javascript - 如何解决 Less error "Uncaught (in promise) TypeError: Cannot read property ' 1' of null"

    java - 有没有办法只在tomcat中部署一个项目而保留其他项目

    java - 拒绝访问异常; Spring 安全

    java - View 、DAO、服务和 Controller 的基本 Hibernate 和 Spring MVC 集成

    java - Spring MVC 不会加载静态内容

    java - 在 tomcat 服务器上加载 js 文件时出现 ERR_CONTENT_LENGTH_MISMATCH

    java - 自定义错误页面不适用于 Weld 和 Tomcat7