Встречается на собеседованиях • сегодня

Как организуешь логирование тела запроса при приеме его контроллером

Для логирования тела запроса в Spring Boot можно использовать фильтры или аспекты. Лучший подход - кастомный OncePerRequestFilter:

java
@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 IOException, ServletException {
        ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);
        filterChain.doFilter(wrappedRequest, response);
        
        byte[] buf = wrappedRequest.getContentAsByteArray();
        if (buf.length > 0) {
            String body = new String(buf, request.getCharacterEncoding());
            logger.info("Request body: {}", body);
        }
    }
}

Важные моменты:

  1. Используем ContentCachingRequestWrapper для многократного чтения тела
  2. Логируем только после выполнения цепочки фильтров
  3. Проверяем длину буфера, чтобы избежать лишнего создания строк
  4. Для прода лучше добавить ограничение на размер лога и маскировку чувствительных данных
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы