在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);并没有成功,什么都没有返回,但是找到了问题所在。