使用 javax.servlet.http.HttpServlet 处理 PATCH 请求?

问题描述 投票:0回答:3

我们在 Spring Web 应用程序中使用 javax.servlet.http.HttpServlet 类的实现作为错误页面(在 web.xml 中定义)以过滤错误信息,出于安全原因发送给我们 API 的用户。

最近我们还必须处理对 API 的 PATCH 请求。由于 HttpServlet 是使用 HTTP 1.1 版实现的,因此它不支持 PATCH 请求(“PATCH”字符串作为请求方法名称)。如果我们要添加功能,我们必须覆盖整个 HttpServlet 实现,这对我们也有负面的安全含义。

是否有开箱即用的方法来实现我们正在尝试的,或者我们是否必须切换到另一个实现(也是可行的)?

java spring servlets
3个回答
5
投票

尝试重写

HttpServlet.service
方法。 对于“DELETE”、“GET”、“HEAD”、“OPTIONS”、“POST”、“PUT”和“TRACE”,将请求传递给服务的
super
实现。

对于“PATCH”,调用您在覆盖类中定义的

doPatch
方法。

在实际课堂上实施

doPatch

关于消息正文的更多信息:
检查 HTTP 参考以查看哪些方法支持方法主体,哪些不支持。 HTTP维基百科页面上有一张漂亮的桌子


2
投票
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");
    }

}

0
投票
    @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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.