使用 Spring MVC 在 tomcat 中的 PATCH 方法
Posted
技术标签:
【中文标题】使用 Spring MVC 在 tomcat 中的 PATCH 方法【英文标题】:PATCH method in tomcat with Spring MVC 【发布时间】:2013-12-20 16:15:36 【问题描述】:我使用的是 spring 3.2.4,并且我读到 Spring MVC 3.2.X 明确支持 PATCH HTTP 方法:
https://jira.springsource.org/browse/SPR-7985
http://docs.spring.io/spring/docs/3.2.0.RC1/reference/html/new-in-3.2.html
但是,当我在 Tomcat (7.0.41) 中部署我的应用程序时,我在使用 PATCH 方法时系统性地收到 501 错误。
为什么这不起作用?有没有办法让它工作?我应该使用另一个容器而不是 Tomcat 吗?
编辑:
这是我的 web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
还有我的依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<scope>runtime</scope>
</dependency>
提前致谢,
杰罗姆
【问题讨论】:
你能展示你的依赖(jars)和servlet配置吗?无论tomcat(servlet)版本如何,spring的FrameworkServlet都支持PATCH方法。 【参考方案1】:好的,我终于找到了解决方案: http://docs.spring.io/spring/docs/3.2.5.RELEASE/spring-framework-reference/htmlsingle/#mvc-ann-form-urlencoded-data
为了支持 HTTP PUT 和 PATCH 请求,spring-web 模块提供 过滤器HttpPutFormContentFilter,可以在里面配置 web.xml:
<filter>
<filter-name>httpPutFormFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpPutFormFilter</filter-name>
<servlet-name>dispatcherServlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
【讨论】:
【参考方案2】: <dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>7.0.30</version>
<scope>provided</scope>
</dependency>
添加tomcat-servlet-api版本升级即可解决问题。
【讨论】:
好的,非常感谢!我将对其进行测试,然后更新有关问题的状态。以上是关于使用 Spring MVC 在 tomcat 中的 PATCH 方法的主要内容,如果未能解决你的问题,请参考以下文章
使EL与嵌入的tomcat 7一起工作(使用spring MVC)