Rest 在Spring Boot中使用JavaAspectJ/Annotation记录http请求

Rest 在Spring Boot中使用JavaAspectJ/Annotation记录http请求,rest,annotations,spring-boot,aspectj,servlet-filters,Rest,Annotations,Spring Boot,Aspectj,Servlet Filters,我创建了一个Aspectj,当用@AuditLog注释方法时会触发它 目的是记录所有请求参数和正文。我遇到的问题是,在Aspectj中,InputStream已经被使用,可能是spring在rest方法中创建@RequestBody参数时使用的 我不想使用带有包装器的过滤器,因为我希望对实际代码进行最小程度的修改,而且我只需要记录某些方法 这可以在Aspectj内部完成吗 编辑。更多信息添加 我想在AspectJ中这样做,因为我不需要记录所有的方法,我还需要从属性文件中读取信息并添加到日志消息

我创建了一个Aspectj,当用@AuditLog注释方法时会触发它

目的是记录所有请求参数和正文。我遇到的问题是,在Aspectj中,InputStream已经被使用,可能是spring在rest方法中创建@RequestBody参数时使用的

我不想使用带有包装器的过滤器,因为我希望对实际代码进行最小程度的修改,而且我只需要记录某些方法

这可以在Aspectj内部完成吗


编辑。更多信息添加

我想在AspectJ中这样做,因为我不需要记录所有的方法,我还需要从属性文件中读取信息并添加到日志消息中。必须将此日志保存到队列中以供以后处理


A可以在AspectJ中使用包装器,但InsputStream已经被使用

侵入性最小的方法是过滤器,因为它不需要任何代码更改,HeckSpring已经为您提供了一个过滤器。另见。无论哪种方式,您都无法读取正文两次,因此您将始终需要使用某种包装,否则您将过早地使用它进行日志记录,或者由于它已被使用而无法进行日志记录。谢谢您的回答。我还需要在日志消息中放入跟踪id,并将其发送到队列。这就是为什么我想在AspectJ中实现它。我可以在AspectJ中使用包装器,但是InputStream在到达那里时已经被使用。正确,因此它永远不会以这种方式工作,因为需要包装传入的请求。另外,添加我将使用MDC执行的跟踪id,并在日志消息中为其使用占位符(您可以使用另一个过滤器填充此占位符),这将使一切透明,您无需更改代码,只需配置几件事。谢谢@M.Deinum。因为我只需要记录一些方法和读取注释属性,所以我最终使用了一个过滤器并创建了一个请求包装器。