【问题标题】:Get HttpServetRequest body data inside Spring app在 Spring 应用程序中获取 HttpServletRequest 正文数据
【发布时间】:2017-06-01 17:32:08
【问题描述】:

我有一个 spring 应用程序,其中包含一些 servlet。这些请求都已连接起来并像 ServletComponentScan 一样使用,但在 Servlet 中,当它尝试使用“getInputStream”或其他任何内容时,它不会返回任何数据。我猜这是因为 Spring 首先读取主体,并且数据只能读取一次。有没有办法让它正常工作?

@WebServlet(urlPatterns={"/servlet"})
public class ServletController extends HttpServlet {

    private static final Logger logger = LoggerFactory.getLogger(ServletController.class);

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();

        String bodyData = extractBody(req);

        out.println("BodyData: " + bodyData);
    }

    public static String extractBody(HttpServletRequest request) {
        StringBuffer sb = new StringBuffer();
        String line = null;
        BufferedReader reader = null;
        try {
            InputStreamReader isr = new InputStreamReader(request.getInputStream());
            reader = new BufferedReader(isr);

            int i;
            while ((i = reader.read()) != -1) {
                sb.appendCodePoint(i);
            }
        } catch (Exception e) {
            logger.error("Failed to read from servletRequest with content-length: {}", request.getHeader("Content-Length"));
            e.printStackTrace();
        }
        return sb.toString();
    }
}

上面是一个例子,当它在tomcat或其他任何东西中时,它很好。当它在与 Spring 相关的应用程序中时,它不起作用。

春天

$ curl -X POST -d'{}' http://localhost:8080/servlet
BodyData:

Plain Servlet(内置于“plainservlet.war”并部署到 tomcat)

# curl -X POST -d'{}' http://localhost:8081/plainservlet/servlet
BodyData: {}

【问题讨论】:

    标签: java spring spring-mvc tomcat servlets


    【解决方案1】:

    ...这很愚蠢,但答案似乎是 Spring 实际上正在验证请求,而普通 servlet 没有(duh)。它需要适当的标题和内容。

    $ curl -X POST -d'{}' -H "Content-type: application/json" http://localhost:8080/servlet
    BodyData: {}
    

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2018-10-19
      • 2010-09-12
      相关资源
      最近更新 更多