Сохранение запроса и ответа с идентификатором сеанса для каждого запроса в текстовом файле, REST API Spring Boot - PullRequest
0 голосов
/ 03 июня 2018

Требуется помощь в сохранении запроса и ответа API REST ниже:

Session ID:
Request:
{
   {
   request header
   }
   {
   request body
   }
}
Response:
{
    {
     response header
   }
   {
   response body
   }
}

Это не должно зависеть от уровня ведения журнала или любых других концепций, связанных с ведением журнала.Проверено много похожих вопросов, но нет ответов на них. Может ли кто-нибудь помочь мне в этом, пожалуйста, спасибо.

Spring Boot - Как регистрировать все запросы и ответы с исключениями в одном месте?

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

Я нашел ответ от Gist https://gist.github.com/int128/e47217bebdb4c402b2ffa7cc199307ba Регистрация как запроса, так и ответа.Внесены некоторые незначительные изменения, основанные на моем требовании записать в файл вместо записи в журнал с использованием функции Java 7.

Path path = Paths.get("home/midoriya/sample.txt");
String strValue = "Whatever the values want to write in file";
Path path = Paths.get(fileName);
byte[] bytes = strValue.getBytes();
Files.write(path, bytes);

или

FileWriter fw = null;
BufferedWriter writer = null;
//  File logFile = null;

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    try {
        LocalDate localDate = LocalDate.now();
        File logFile = new File("/home/ramesh/logReqRes"+localDate.getDayOfMonth()+localDate.getMonth()+".txt");
        boolean flag = logFile.createNewFile();
        System.out.println("flag :" + flag);
        if( flag || logFile.length() >= (1024*1024*1024)) 
            fw = new FileWriter(logFile, false);
        else
            fw = new FileWriter(logFile, true);

        writer = new BufferedWriter(fw);
        if (isAsyncDispatch(request)) {
            filterChain.doFilter(request, response);
        } else {
            doFilterWrapped(wrapRequest(request), wrapResponse(response), filterChain);
        }
    } catch (IOException io) {
        io.printStackTrace();
    }
    catch (Exception ex) {
        ex.printStackTrace();

    }
    finally {

        try {

            if (writer != null)
                writer.close();

            if (fw != null)
                fw.close();

        } catch (IOException ex) {

            ex.printStackTrace();

        }
    }
0 голосов
/ 03 июня 2018

Вы можете использовать HandlerInterceptorAdapter и записать необходимую информацию в свой файл:

Spring предоставляет механизм для настройки пользовательских перехватчиков для выполнения действий до и после веб-запросов.

Среди перехватчиков запросов Spring одним из заслуживающих внимания интерфейсов является HandlerInterceptor, который можно использовать для регистрации входящего запроса путем реализации следующих методов:

preHandle () - этот метод выполняется до фактического контроллерасервисный метод afterCompletion () - этот метод выполняется после того, как контроллер готов отправить ответ. Кроме того, Spring предоставляет реализацию интерфейса HandlerInterceptor по умолчанию в виде класса HandlerInterceptorAdaptor, который может быть расширен пользователем.

Let'sсоздайте наш собственный перехватчик, расширив HandlerInterceptorAdaptor следующим образом:

@Component public class TaxiFareRequestInterceptor extends
HandlerInterceptorAdapter {

@Override
public boolean preHandle(
  HttpServletRequest request, 
  HttpServletResponse response, 
  Object handler) {
    return true;
}

@Override
public void afterCompletion(
  HttpServletRequest request, 
  HttpServletResponse response, 
  Object handler, 
  Exception ex) {
    //
} }

http://www.baeldung.com/spring-http-logging

http://www.baeldung.com/spring-mvc-handlerinterceptor

...