更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'”

Posted

技术标签:

【中文标题】更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 \'GET\'”【英文标题】:Changing servlet mapping throws "HTTP Status 405 - Request method 'GET' not supported"更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'” 【发布时间】:2015-11-11 01:22:20 【问题描述】:

我有一个问题:最初我有这个 servlet 映射:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

所有映射到example.html、example2.html url的控制器都很好。但在某些情况下,我想使用 *.json 映射,在这种情况下,我通过这种方式更改了 servlet 映射:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

在这个改变之后我得到了

HTTP 状态 405 - 不支持请求方法“GET”

引发错误的控制器示例:

       @RequestMapping(value="example.html",method = RequestMethod.GET)
      public String example(
          @RequestParam(value = "q", defaultValue = "") String query,
          @RequestParam(value = "page", required = false, defaultValue = "1") int page,
          HttpServletRequest request, Model model)  

        String template = "printout-blog";
    model.addAttribute("q", query);
    return template;

【问题讨论】:

为什么不向现有映射添加另一个 URL 模式 *.json?在 servlet 上使用 /* 是一种巨大的气味。另见 a.o. ***.com/a/4140659 【参考方案1】:

您将url-pattern 定义为/*,这意味着调度程序将处理所有传入请求。将您的请求映射更改为下一行中的代码 sn-p ! (网址应该以斜杠/开头),一切都会正常

 @RequestMapping(value="/example.html",method = RequestMethod.GET)
      public String example(
          @RequestParam(value = "q", defaultValue = "") String query,
          @RequestParam(value = "page", required = false, defaultValue = "1") int page,
          HttpServletRequest request, Model model)

【讨论】:

以上是关于更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'”的主要内容,如果未能解决你的问题,请参考以下文章

Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

Java Servlet,http状态404,请求的资源不可用[重复]

将 MySQL json 列映射到 JPA 会引发错误

如何从 java servlet 中抛出 404 错误?

即使存在单个 servlet,也会出现“java.lang.IllegalStateException:多个 servlet 映射到路径 /*”错误

Servlet 返回“HTTP 状态 404 请求的资源 (/servlet) 不可用”