用angular的post提交时候发现servlet,getparameter取不到值,看network发现传值变成了request payload,而不是form data。
对比两种请求头发现
form表单提交的是application/x-www-form-urlencoded
而angular的post提交的是 application/json;charset=UTF-8
从而导致两种不同的请求体。而servlet的getparameter方法原理也是解析inputstream流进而将参数传到parameter里面,但它没有解析request payload的请求体。
解决方法1:将上传的报文头改为application/x-www-form-urlencoded
解决方法2:解析inputstream
- private String getStringFromStream(HttpServletRequest req) {
- ServletInputStream is;
- try {
- is = req.getInputStream();
- int nRead = 1;
- int nTotalRead = 0;
- byte[] bytes = new byte[10240];
- while (nRead > 0) {
- nRead = is.read(bytes, nTotalRead, bytes.length - nTotalRead);
- if (nRead > 0)
- nTotalRead = nTotalRead + nRead;
- }
- String str = new String(bytes, 0, nTotalRead, "utf-8");
- return str;
- } catch (IOException e) {
- e.printStackTrace();
- return "";
- }
- }
-