我有一个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
对此有任何帮助将不胜感激。
答案 0 :(得分:0)
解决了问题 - 省略了前缀参数字符串中的前导斜杠会导致问题。为了正确配置,参数应为:
viewResolver.setPrefix("/WEB-INF/pages/");