您可以通过使用来记录所有内容,CustomizableTraceInterceptor
您可以在应用程序上下文 xml 配置中设置它并使用 AOP:(日志级别跟踪)
<bean id="customizableTraceInterceptor"
class="org.springframework.aop.interceptor.CustomizableTraceInterceptor">
<property name="exitMessage" value="Leaving $[methodName](): $[returnValue]" />
</bean>
或者您可以通过在 Java 中实现它并使用 setExitMessage() 方法来完全自定义它:
public class TraceInterceptor extends CustomizableTraceInterceptor {
private Logger log = LoggerFactory.getLogger("blabla");
@Override
protected void writeToLog(Log logger, String message, Throwable ex) {
//Write debug info when exception is thrown
if (ex != null) {
log.debug(message, ex);
}
....
}
@Override
protected boolean isInterceptorEnabled(MethodInvocation invocation, Log logger) {
return true;
}
@Override
public void setExitMessage(String exitMessage) {
.... //Use PlaceHolders
}
}
并使用诸如“$[returnValue]”之类的占位符。您可以在spring api 文档中找到完整列表。
编辑:另外,如果您想在另一个拦截器中获取 @ResponseBody 的值,我认为在版本 > 3.1.1 之前这是不可能的。检查这个问题:https ://jira.springsource.org/browse/SPR-9226