The Java Servlet specification does not include handling a PATCH request. That means that class javax.servlet.http.HttpServlet does not have a doPatch() method, unlike doGet, doPost, doPut etc.
That does not mean that a Java Servlet can not handle PATCH requests. It is quite simple to make it do that.
The trick is overriding the service(request,response) method – and have it respond to PATCH requests (in a special way) and to all other requests in the normal way. Or to do it one step more elegantly:
- create an abstract class – MyServlet for example – that extends from HttpServlet, override servce() and add an abstract doPatch() method – that is not supposed to be ever invoked but only be overridden
12345678910111213141516171819202122
package
nl.amis.patch.view;
import
java.io.IOException;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
public
abstract
class
MyServlet
extends
HttpServlet {
public
void
service(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
if
(request.getMethod().equalsIgnoreCase(
"PATCH"
)){
doPatch(request, response);
}
else
{
super
.service(request, response);
}
}
public
abstract
void
doPatch(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException;
}
- any servlet (class) that should handle PATCH requests should extend from this class [MyServlet] and implement the doPatch() method
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package nl.amis.patch.view; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet (name = "TheServlet" , urlPatterns = { "/theservlet" }) public class TheServlet extends MyServlet { private static final String CONTENT_TYPE = "text/html; charset=windows-1252" ; public void init(ServletConfig config) throws ServletException { super .init(config); } public void doPatch(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println( "<html>" ); out.println( "<head><title>TheServlet</title></head>" ); out.println( "<body>" ); out.println( "<p>The Servlet has received a PATCH request and will do something meaningful with it! This is the reply.</p>" ); out.println( "</body></html>" ); out.close(); } } |
Here is the result of sending a PATCH request from Postman to the Servlet: