【问题标题】:How do you access the RequestBody in a HandlerInterceptorAdapter?如何访问 HandlerInterceptorAdapter 中的 RequestBody?
【发布时间】:2011-10-14 12:24:02
【问题描述】:

我试图将正文从request.getReader() 中拉出来,但它已经被读取了。

我怎样才能在拦截器中获得请求体?

【问题讨论】:

    标签: java servlets spring-mvc


    【解决方案1】:

    如您所说,请求正文只能从Reader 读取一次。这不是特定于拦截器的,而是针对 Servlet API 的所有用户的。

    如果您需要第二次访问正文,则需要将数据存储在某处,例如在请求属性中(使用request.setAttribute()request.getAttribute())。

    您执行此操作的方式和位置取决于您的拦截器,并且您没有告诉我们您的具体情况。

    【讨论】:

    • 如问题所示,它是一个普通的 HandlerInterceptorAdapter。你还需要知道什么?
    • @user366735:没有“普通香草HandlerInterceptorAdapter”这样的东西。这是一个没有任何行为的空基类。您需要对其进行子类化以使其有用,并且有 3 种不同的方法可以实现,在请求生命周期的 3 个不同点调用。答案完全取决于你是如何做到的。
    • 普通香草意味着我所做的只是用空实现来实现它。因此,为了举例,我如何在 preHandle 方法中获取 requestBody 的句柄? public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //现在怎么办? }
    • 这个问题很有道理。我想用它做什么并不重要。关键是我想在拦截器方法中对请求主体进行一些处理。例如,假设我想将它记录在我的拦截器中。字符串 reqBody = ?; LOGGER.log(reqBody);
    • 大声笑,听起来我已经回答了我自己的问题。 RequestContextHolder 是真的!
    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多