java.lang.IllegalStateException:已为当前请求调用getReader()后无法调用getInputStream()。>

问题描述 投票:0回答:1

我写了拦截器:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    log.info("[pre-handle] method: {}\tURL: {}", request.getMethod(), request.getRequestURL());
    if (HttpMethod.POST.name().equals(request.getMethod())) {
        log.info(request.getReader().lines().collect(Collectors.joining()));
    }
    return true;
}

但是当我尝试调用控制器时,抛出异常:

java.lang.IllegalStateException:之后无法调用getInputStream()已为当前请求调用getReader()

据我了解,getReader()调用关闭InputStream,而控制器没有任何响应。如何解决?

[我写了拦截器:@Override公共布尔preHandle(HttpServletRequest请求,HttpServletResponse响应,对象处理程序)引发异常{log.info(“ [pre-handle]方法:{} \ tURL:{}”,...

java interceptor
1个回答
1
投票

要多次读取请求,您将需要在第一次读取请求之前对其进行缓存。更多信息可以阅读here


0
投票

在您的情况下,潜在的问题是您需要读取输入流两次。您可以使用ServletRequestWrapper并以日志记录方法和实际控制器访问数据。对于(部分)示例

© www.soinside.com 2019 - 2024. All rights reserved.