我们在 Spring Web 应用程序中使用 javax.servlet.http.HttpServlet 类的实现作为错误页面(在 web.xml 中定义)以过滤错误信息,出于安全原因发送给我们 API 的用户。
最近我们还必须处理对 API 的 PATCH 请求。由于 HttpServlet 是使用 HTTP 1.1 版实现的,因此它不支持 PATCH 请求(“PATCH”字符串作为请求方法名称)。如果我们要添加功能,我们必须覆盖整个 HttpServlet 实现,这对我们也有负面的安全含义。
是否有开箱即用的方法来实现我们正在尝试的,或者我们是否必须切换到另一个实现(也是可行的)?
尝试重写
HttpServlet.service
方法。
对于“DELETE”、“GET”、“HEAD”、“OPTIONS”、“POST”、“PUT”和“TRACE”,将请求传递给服务的super
实现。
对于“PATCH”,调用您在覆盖类中定义的
doPatch
方法。
在实际课堂上实施
doPatch
关于消息正文的更多信息:
检查 HTTP 参考以查看哪些方法支持方法主体,哪些不支持。
HTTP维基百科页面上有一张漂亮的桌子
public class CustomServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
if (!method.equals("PATCH")) {
super.service(req, resp);
}
this.doPatch(req, resp);
}
protected void doPatch(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("At patch method");
}
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String method = req.getMethod();
if (!method.equals("PATCH")) {
super.service(req, res);
return;
}
this.doPatch(req, res);
}