Sobes.tech
Junior — Middle
111

¿Cómo implementa el registro del contenido de la solicitud entrante en el controlador?

Empresas donde se preguntó
СБЕР КорпусСБЕР Корпус

Respuesta de la IA

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);
    }
}

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