Почему response.getStatus() возвращает 200 OK, даже если фактический ответ не

Я реализую функцию, которая регистрирует весь доступ к моему API в файле журнала. В нем у меня есть код состояния ответа, а также некоторая информация, связанная с каждым доступом. Я получаю код состояния с помощью response.getStaus(), как показано в AppLogFilter.

Однако он всегда регистрирует 200 OK, даже если фактический статус ответа равен 400 или 405. Почему response.getStatus() возвращает 200 OK, даже если фактический ответ не

В чем тут может быть проблема?

Конфигурация фильтра

package com.example.kasahararestapi.filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean<ApiLogFilter> filterRegistrationBean() {
        FilterRegistrationBean<ApiLogFilter> registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new ApiLogFilter());
        registrationBean.addUrlPatterns("/api/items/*");
        return registrationBean;
    }
}

Апилогфильтр

@Component
public class ApiLogFilter extends OncePerRequestFilter {

    private final Logger logger = LoggerFactory.getLogger(ApiLogFilter.class);


    @Override
    public final void doFilterInternal(
            HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        long startTime = System.currentTimeMillis();

        long processingTime = System.currentTimeMillis() - startTime;


        logger.info(
                "{} {} {} {}", request.getMethod(),
                request.getRequestURI(), response.getStatus(), processingTime);
        filterChain.doFilter(request, response);
    }

}

вы вызывали этот метод до filterChain.doFilter(request, response);, поэтому значение по умолчанию равно 200

Avi 10.07.2019 12:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
651
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Изменять

logger.info(
                "{} {} {} {}", request.getMethod(),
                request.getRequestURI(), response.getStatus(), processingTime);
        filterChain.doFilter(request, response);

К

filterChain.doFilter(request, response);
logger.info(
                "{} {} {} {}", request.getMethod(),
                request.getRequestURI(), response.getStatus(), processingTime);

Причина: Цепочка имен предполагает, что у вас есть последовательность фильтров, где каждый фильтр выполняет некоторую обработку, а затем переходит к следующему по порядку, поэтому каждый объект имеет член цепочки, указывающий на следующий фильтр в последовательности, который gets called after the filter has performed its own processing. последний в тогда последовательность, вероятно, будет иметь null в качестве значения цепочки, или она сама знает, что она последняя в последовательности. Другими словами, вы регистрируете информацию до, обработанную фильтром, что приводит к статусу 200

Другие вопросы по теме