踩坑-SpringBoot中读取HttpServletRequest流陷入死循环
AI-摘要
切换
Qi GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
踩坑记录
在使用Jeepay开源支付系统项目中有一个读取HttpServletRequest流的方法,我把这个方法用在基于此系统二次开发的SpringBoot项目中结果陷入死循环。
经过很久很久很久很久很久的测试,发现这个方法用在SpringBoot项目有问题,现在将这个坑记录下来。
原始方案
SpringMVC中HttpServletRequest读取流的方法,该方法在SpringBoot中调用会陷入死循环
/**
* JSON 格式通过请求主体(BODY)传输 获取参数
*/
public String getReqParamFromBody() {
String body = "";
if (isConvertJSON()) {
try {
String str;
while ((str = request.getReader().readLine()) != null) {
body += str;
}
return body;
} catch (Exception e) {
log.error("请求参数转换异常! params=[{}]", body);
throw new ServiceException("转换异常", ApiCodeEnum.PARAMS_ERROR.getCode());
}
} else {
return body;
}
}
解决办法
在SpringBoot项目中建立缓冲流(BufferedReader)读取
/**
* JSON 格式通过请求主体(BODY)传输 获取参数
*/
public String getReqParamFromBody() {
StringBuilder body = new StringBuilder();
if (isConvertJSON()) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));
String str;
while ((str = in.readLine()) != null) {
body.append(str);
}
return body.toString();
} catch (Exception e) {
log.error("请求参数转换异常! params=[{}]", body.toString());
throw new ServiceException("转换异常", ApiCodeEnum.PARAMS_ERROR.getCode());
}
} else {
return body.toString();
}
}
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 云深不知处
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果