How to retrieve raw post data from HttpServletRequest in java

前端 未结 3 517
栀梦
栀梦 2020-12-04 13:21

I\'m trying to get the post data in Java. Seems like it should be one of the simplest things to do right? I mean, HttpServletRequest.getParameter has to do it right? So how

3条回答
  •  眼角桃花
    2020-12-04 13:51

    We had a situation where IE forced us to post as text/plain, so we had to manually parse the parameters using getReader. The servlet was being used for long polling, so when AsyncContext::dispatch was executed after a delay, it was literally reposting the request empty handed.

    So I just stored the post in the request when it first appeared by using HttpServletRequest::setAttribute. The getReader method empties the buffer, where getParameter empties the buffer too but stores the parameters automagically.

        String input = null;
    
        // we have to store the string, which can only be read one time, because when the
        // servlet awakens an AsyncContext, it reposts the request and returns here empty handed
        if ((input = (String) request.getAttribute("com.xp.input")) == null) {
            StringBuilder buffer = new StringBuilder();
            BufferedReader reader = request.getReader();
    
            String line;
            while((line = reader.readLine()) != null){
                buffer.append(line);
            }
            // reqBytes = buffer.toString().getBytes();
    
            input = buffer.toString();
            request.setAttribute("com.xp.input", input);
        }
    
        if (input == null) {
            response.setContentType("text/plain");
            PrintWriter out = response.getWriter();
            out.print("{\"act\":\"fail\",\"msg\":\"invalid\"}");
        }       
    

提交回复
热议问题