Spring MVC如何处理由Angular Router生成的URL的请求?

时间:2016-11-18 21:11:12

标签: java spring spring-mvc angular

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

html提供标准的Spring MVC /baz/x

@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),这会导致404错误。< / p>

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

baz

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

1 个答案:

答案 0 :(得分:0)

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

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