如何检测HttpServletRequest是否具有主体?

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

[我试图检测http请求是否具有主体,而不读取它,或者不执行任何使现有代码无法执行它的操作,无论它稍后在流程中进行什么。

boolean hasBody(HttpServletRequest http) {
    boolean hasBody = false;
    try {
        hasBody = http.getInputStream() != null; // always gives true
        hasBody = http.getReader().ready(); // always gives IllegalStateException
    } catch (IOException e) {
    }
    return hasBody;
}

[不幸的是,当我将它们作为GET和POST与body一起测试时,我可以拿出的两项检查均不起作用。

[注意,我不想这样做:"POST".equals(http.getMethod())!"GET".equals(http.getMethod()),如果可能的话,因为我不确定使用或不使用主体可以使用什么方法。

java servlets
2个回答
1
投票

您可以使用getContentLength()或getContentLengthLong()并检查它是否为正。


0
投票

包含正文的请求,如果在https://tools.ietf.org/html/rfc7230#section-3.3之后,则应设置某些标头

请求中消息正文的存在由Content-Length或Transfer-Encoding标头字段。

您可以使用http.getHeader("transfer-encoding") != null || http.getHeader("content-length") != null检查这些标题的存在。

请求正文可能存在但为空。如果要捕获,可以添加内容长度> 0的检查,但这仅在请求包含内容长度标头的情况下有效。看起来您必须尝试读取请求正文,以查看没有内容长度标头时它是否为空。

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