Sobes.tech
Назад к вопросам
Junior — Middle
76

Каким образом вы реализуете логирование содержимого входящего запроса в контроллере?

Компании, где спрашивали
СБЕР КорпусСБЕР Корпус

Ответ от нейросети

sobes.tech AI

Для логирования содержимого входящего HTTP-запроса в контроллере на Java часто используют фильтры или аспекты, чтобы не загромождать сам контроллер. В простом случае можно логировать тело запроса и заголовки, например, с помощью Spring Boot и OncePerRequestFilter:

@Component
public class RequestLoggingFilter extends OncePerRequestFilter {
    private static final Logger logger = LoggerFactory.getLogger(RequestLoggingFilter.class);

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        // Обертка для многократного чтения тела запроса
        ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);

        filterChain.doFilter(wrappedRequest, response);

        String requestBody = new String(wrappedRequest.getContentAsByteArray(), request.getCharacterEncoding());
        logger.info("Request URI: {}", request.getRequestURI());
        logger.info("Request Method: {}", request.getMethod());
        logger.info("Request Body: {}", requestBody);
    }
}

Такой подход позволяет централизованно логировать запросы без изменения контроллеров. В контроллере можно также логировать параметры или заголовки, если нужно, но лучше отделять логику логирования от бизнес-логики.