方法1:
例如postman测试,请求携带的body值为:
{“username”:“abc”,
“password”:“123”
}
写restful登录接口时需要用到username的值进行比对
应用:将请求值与正确的登录用户名密码进行比对
private String login(@ReqequstBody Map<String String>params,HttpServletResponse response){
String username=params.get("username");
String pwd=params.get("password");
}
方法二:
需要读取整体的body值,可以将body读成一个字符串格式,也可以读成二进制格式,这里只举例一种,其余可以自行百度
应用:可以判断body是不是合格的json格式
public class HttpServletRequestReader
{
// 字符串读取
// 方法一
public static String ReadAsChars(HttpServletRequest request)
{
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try
{
br = request.getReader();
String str;
while ((str = br.readLine()) != null)
{
sb.append(str);
}
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (null != br)
{
try
{
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return sb.toString();
}
方法三:如果上述两功能需要结合,但是getreader()只能使用一次,如果既要执行getreader(),又要执行getparameter()操作,将会报错(null或者重复请求)。找了网上大部分让重写包装类,嫌烦没有采用那种方式。
我采用的方法是先用流读完整的requestbody,再转换为json格式取参数值
String req=getBody.ReadBody(request);
可以用req.contains()或者正则匹配来判断格式问题
JSONObject json=JSONObject.parseObject(req);
username=json.getString("username");