【问题标题】:How Can Spring MVC Handle Requests to URLs Generated by the Angular Router?Spring MVC 如何处理对 Angular 路由器生成的 URL 的请求?
【发布时间】:2017-04-02 19:55:57
【问题描述】:

我有一个 Spring (v, 4.3.2 & Java 8) 应用程序,它提供一个 Angular2 单页应用程序前端,它有多个路由(比如 /foo/bar/baz,其中一个需要要呈现的参数(/baz/x 其中 x 是要检索的资源的标识符)。

该 html 由标准 Spring MVC @Controller 提供:

@RequestMapping(value = {"/", "/foo", "/bar", "/baz/{id}"}, method = RequestMethod.GET)
public String index(@PathVariable Optional<String> id) {
    return "index";
}

并使用以下方法解析视图:

@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("WEB-INF/pages/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}

如果浏览器从//foo/bar 路由重新加载,控制器会正确返回index 页面,并且角度会按预期解析路由的视图。但是,如果浏览器从包含参数的 baz 路由之一重新加载,服务器会将 baz 预先添加到资源路径(例如 /baz/WEB-INF/pages/index.jsp),这会导致 404 错误。

我尝试将 baz 请求映射信息重构为不同(相同)方法的注释并在请求映射中使用通配符(例如 /**baz/* ),但总是得到相同的结果。无论请求映射如何,Spring 似乎都没有意识到它正在将 baz 附加到路径中,因为日志包含:

DEBUG: org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.InternalResourceView: name 'index'; URL [WEB-INF/pages/index.jsp]] in DispatcherServlet with name 'dispatcher'
DEBUG: org.springframework.web.servlet.view.InternalResourceView - Forwarding to resource [WEB-INF/pages/index.jsp] in InternalResourceView 'index'
DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: java spring spring-mvc angular


    【解决方案1】:

    解决了问题 - 从前缀参数字符串中省略前导斜杠会导致问题。对于正确的配置,参数应该是:

    viewResolver.setPrefix("/WEB-INF/pages/");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多