diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java index 58a7341852..570c5a1f0e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java @@ -785,7 +785,7 @@ public abstract class FrameworkServlet extends HttpServletBean { String method = request.getMethod(); if (method.equalsIgnoreCase(RequestMethod.PATCH.name())) { - doPatch(request, response); + processRequest(request, response); } else { super.service(request, response); @@ -828,16 +828,6 @@ public abstract class FrameworkServlet extends HttpServletBean { processRequest(request, response); } - /** - * Delegate PATCH requests to {@link #processRequest}. - * @see #doService - */ - protected final void doPatch(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - processRequest(request, response); - } - /** * Delegate DELETE requests to {@link #processRequest}. * @see #doService @@ -867,6 +857,9 @@ public abstract class FrameworkServlet extends HttpServletBean { } } super.doOptions(request, response); + String allowedMethods = response.getHeader("Allow"); + allowedMethods += ", " + RequestMethod.PATCH.name(); + response.setHeader("Allow", allowedMethods); } /** diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/DispatcherServletTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/DispatcherServletTests.java index 6a5ec06388..6549c4dde0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/DispatcherServletTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/DispatcherServletTests.java @@ -16,6 +16,12 @@ package org.springframework.web.servlet; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.sameInstance; +import static org.junit.Assert.assertThat; + import java.io.IOException; import java.util.Locale; @@ -60,9 +66,6 @@ import org.springframework.web.servlet.theme.AbstractThemeResolver; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.util.WebUtils; -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; - /** * @author Rod Johnson * @author Juergen Hoeller @@ -855,6 +858,14 @@ public class DispatcherServletTests extends TestCase { assertThat(custom.getEnvironment(), instanceOf(CustomServletEnvironment.class)); } + public void testAllowedOptionsIncludesPatchMethod() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(getServletContext(), "OPTIONS", "/foo"); + MockHttpServletResponse response = new MockHttpServletResponse(); + DispatcherServlet servlet = new DispatcherServlet(); + servlet.service(request, response); + assertThat(response.getHeader("Allow"), equalTo("GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH")); + } + public static class ControllerFromParent implements Controller {