【问题标题】:How can I log the JSON response of Spring 3 controllers with @ResponseBody in a HandlerInterceptorAdapter?如何在 HandlerInterceptorAdapter 中使用 @ResponseBody 记录 Spring 3 控制器的 JSON 响应?
【发布时间】:2013-01-15 22:54:13
【问题描述】:

我有向客户端返回 JSON 的控制器。控制器方法使用 mvc 注释标记,例如:

@RequestMapping("/delete.me")
public @ResponseBody Map<String, Object> delete(HttpServletRequest request, @RequestParam("ids[]") Integer[] ids) {

Spring 知道返回 JSON,因为 Jackson 在类路径上并且客户端正在请求 JSON 响应。我想记录这些请求和所有其他控制器的响应。在过去,我使用拦截器来执行此操作。但是,我从 ModelAndView 获得了响应正文。既然我正在使用@ResponseBody,如何在拦截器中获取响应正文?具体来说,如何获取该方法的响应体?

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {

【问题讨论】:

标签: spring spring-mvc interceptor


【解决方案1】:

您可以使用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 documentation 中找到完整列表。

编辑:另外,如果您想在另一个拦截器中获取 @ResponseBody 的值,我认为在版本 > 3.1.1 之前这是不可能的。检查这个问题:https://jira.springsource.org/browse/SPR-9226

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2015-01-14
    • 2015-10-19
    • 2013-02-08
    相关资源
    最近更新 更多