0
我有一個在其中有一些servlet的spring應用程序。這些請求都是用ServletComponentScan連接起來的,但是在Servlet中,當它嘗試使用「getInputStream」或其他類型時,它不會返回任何數據。我猜測這是因爲Spring首先讀取數據並且數據只能被讀取一次。有沒有辦法使這個工作正常?在Spring應用程序中獲取HttpServetRequest正文數據
@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:
平原的Servlet(內置於 「plainservlet.war」,並部署到Tomcat)
# curl -X POST -d'{}' http://localhost:8081/plainservlet/servlet
BodyData: {}