在文本文件REST API Spring Boot中为每个请求保存具有会话ID的请求和响应

时间:2018-06-03 13:48:05

标签: java spring spring-boot httprequest httpresponse

需要以下面的方式帮助保存REST API的请求和响应,

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

这不应该取决于日志记录级别或任何其他与日志记录相关的概念。 检查了许多类似的问题,但没有答案, 请允许任何人帮助我,谢谢。

Spring Boot - How to log all requests and responses with exceptions in single place?

2 个答案:

答案 0 :(得分:1)

您可以使用HandlerInterceptorAdapter,并在文件中写下您需要的信息:

  

Spring提供了一种配置用户定义的拦截器的机制   在Web请求之前和之后执行操作。

     

在Spring请求拦截器中,其中一个值得注意   接口是HandlerInterceptor,可用于记录   通过实施以下方法传入请求:

     

preHandle() - 此方法在实际控制器之前执行   service方法afterCompletion() - 此方法执行后   控制器已准备好发送响应此外,Spring提供   表单中HandlerInterceptor接口的默认实现   HandlerInterceptorAdaptor类,可以由用户扩展。

     

让我们创建自己的拦截器 - 通过扩展   HandlerInterceptorAdaptor as:

@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

答案 1 :(得分:1)

我从Gist https://gist.github.com/int128/e47217bebdb4c402b2ffa7cc199307ba找到了答案 记录请求和响应。根据我的要求进行了一些小的更改,以写入文件而不是使用Java 7功能进行记录。

refFromURL

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