Почему не вызывается processRequest (запрос, ответ) непосредственно в сервисе (запрос, ответ)? - PullRequest
2 голосов
/ 15 мая 2019

Я изучаю Spring MVC, я посмотрел код около FrameworkServlet.FrameworkServlet расширяется HttpServletBean.HttpServletBean расширяется HttpServlet.FrameworkServlet переопределяет метод service() в HttpServlet.Что меня смущает, так это то, что метод processRequest() не вызывается напрямую в методе service().Поскольку я видел, например, doPost(), doGet() использует processRequest().

Я благодарен за любые ответы.

   /**
     * Override the parent class implementation in order to intercept PATCH requests.
     */
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpMethod httpMethod = 
                HttpMethod.resolve(request.getMethod());
        if (HttpMethod.PATCH == httpMethod || httpMethod == null) {
            processRequest(request, response);
        }
        else {
            super.service(request, response);
        }
    }

почему бы не

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            processRequest(request, response);

    }

если не использовать делегат по HttpServlet для обработки запроса, используйте только processRequest() в FrameworkSevlet, что может произойти?

1 Ответ

1 голос
/ 15 мая 2019

Поскольку HttpServlet реализован с учетом HTTP 1.1, который не поддерживает HTTP PATCH, поэтому Spring реализует логику для обработки PATCH запроса в FrameworkServlet путем простого расширения HttpServlet.

* 1007.* Для запроса не PATCH просто делегируйте HttpServlet для обработки.Для запроса PATCH обработайте сам FrameworkServlet.Так что необходим блок if-then-else в FrameworkServlet для проверки, является ли запрос PATCH.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...