2016-11-18 51 views
2

我有一个春天(V,4.3.2 &的Java 8)应用程序,它提供了具有多条路线(比如/foo/bar/baz,其中一个需要一个参数来呈现Angular2单页应用前端(/baz/x哪里x是资源检索)的标识符Spring MVC如何处理对角度路由器生成的URL的请求?

的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/*)使用通配符,但总是得到相同的结果。不管请求映射,春天似乎不知道它正在追加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 

任何帮助,在此,将不胜感激。

回答

0

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

viewResolver.setPrefix("/WEB-INF/pages/"); 
相关问题