Adding PathVariable changes view path on RequestMapping

五迷三道 提交于 2019-12-11 12:46:47

问题


I have a view resolver:

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

and a controller:

@Controller
public class WorkflowListController {

 @RequestMapping(path = "/workflowlist", method = RequestMethod.GET)
 public ModelAndView index() throws LoginFailureException, PacketException,
        NetworkException {

    String profile = "dev";
    List<WorkflowInformation> workflows = workflows(profile);

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("profile", profile);
    map.put("workflows", workflows);
    return new ModelAndView("workflowlist", map);
 }
}

and when I call the page http://127.0.0.1:8090/workflowlist it serves the jsp from src/main/webapp/WEB-INF/jsp/workflowlist.jsp. That all seems to work well.

However when I try to add a @PathVariable:

@RequestMapping(path = "/workflowlist/{profile}", method = RequestMethod.GET)
public ModelAndView workflowlist(@PathVariable String profile)
        throws LoginFailureException, PacketException, NetworkException {

    List<WorkflowInformation> workflows = workflows(profile);

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("profile", profile);
    map.put("workflows", workflows);
    return new ModelAndView("workflowlist", map);
}

When I call the page http://127.0.0.1:8090/workflowlist/dev gives the following message:

There was an unexpected error (type=Not Found, status=404).
/workflowlist/WEB-INF/jsp/workflowlist.jsp

Can someone explain why I'm returning the same view name in both cases but in the second example it is behaving differently?

How can I get it to work?


回答1:


The problem was with my viewResolver:

resolver.setPrefix("WEB-INF/jsp/");

should have been:

resolver.setPrefix("/WEB-INF/jsp/");

With a / at the front the path is taken from the root (webapps folder) but when the / is missing it becomes a relative path.

I never got an answer as to why the view resolver only took the directory part of the path but that's what appeared to happen. It's probably so you can define subtrees of views with different roots.



来源:https://stackoverflow.com/questions/35777018/adding-pathvariable-changes-view-path-on-requestmapping

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!