Назад к вопросам
СБЕР Корпус
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);
}
}
Такой подход позволяет централизованно логировать запросы без изменения контроллеров. В контроллере можно также логировать параметры или заголовки, если нужно, но лучше отделять логику логирования от бизнес-логики.