[坑]拦截器返回response.getWrite().println方法返回数据不全

在SpringBoot项目中,前端ajax请求后端,拦截器进行登录拦截判断,如果超时返回false,则给前端返回一段json字符串。

private static void returnJson(HttpServletResponse response, String json) throws Exception{
	PrintWriter writer = null;
	response.setCharacterEncoding("UTF-8");
	response.setContentType("application/json; charset=utf-8");
	// a
	try {
		writer = response.getWriter();
		writer.println(json);
	} catch (IOException e) {
		Log.error("returnJson方法错误:" + e);
	} finally {
		if(writer != null){
			writer.close();
		}
	}
}

在本地运行可以正常返回,但在以liberty应用服务器的镜像中运行返回的字符串缺少:

//期望返回
{
	"return_code":"1",
	"return_msg":"登录超时",	//简化了文字,文字总长35字符长度
	"isLogin":"1"
}

//实际返回
{
	"return_code":"1",
	"return_msg":"登录

从而导致前端报错“未结束的字符”。

解决方案:
在注释a的位置增加

response.setContentLength(json.getBytes().length);

至此问题解决。

但是为什么长度限制还是不太清楚,进入println源码没有找到对应截取操作。还希望各位大佬给小弟解惑!感谢!

参考:https://blog.csdn.net/nianbingsihan/article/details/89319504
虽然用response.setContentLength(-1);并没有成功,什么都没有返回,但是找到了问题所在。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值