【问题标题】:Adding PathVariable changes view path on RequestMapping在 RequestMapping 上添加 PathVariable 更改视图路径
【发布时间】:2016-03-03 16:00:35
【问题描述】:

我有一个视图解析器:

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

和一个控制器:

@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);
 }
}

当我调用页面http://127.0.0.1:8090/workflowlist 时,它会为src/main/webapp/WEB-INF/jsp/workflowlist.jsp 提供jsp。这一切似乎都运作良好。

但是,当我尝试添加 @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);
}

当我调用页面http://127.0.0.1:8090/workflowlist/dev 时,会显示以下消息:

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

有人可以解释为什么我在两种情况下都返回相同的视图名称,但在第二个示例中它的行为不同?

我怎样才能让它工作?

【问题讨论】:

  • 新映射中的路径变量是必需的,所以/workflowlist没有命中@RequestMapping方法,你最终得到404。你需要设置2个映射,像这样:@987654321 @
  • 谢谢,您强调了我的问题(我已更新)的问题。我在第二个例子中打电话给http://127.0.0.1:8090/workflowlist/dev。它在我的控制器内遇到了一个断点,但即使我返回相同的视图名称,生成的视图路径也不同。为什么?
  • @approxiblue - 你是唯一一个试图提供帮助的人,所以如果你创造了一个答案,我会奖励你赏金,否则赏金点将消失在以太中。
  • 还有什么我应该详细说明的吗?我不想重复你的答案。
  • 如果你知道为什么视图解析器只占用目录部分并解释我的最后一段,那就太好了。

标签: spring-mvc request-mapping


【解决方案1】:

问题出在我的viewResolver

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

应该是:

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

前面有/,路径取自根目录(webapps 文件夹),但当/ 丢失时,它变成了相对路径。

我从来没有得到关于为什么视图解析器只使用路径的目录部分的答案,但这似乎是发生的事情。 这可能是因为您可以定义具有不同根的视图子树。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多