Spring Controller响应在AngularJS前端被截断问题求助
解决Spring MVC返回大量数据被截断的问题
我之前也碰到过类似的情况,这种固定在10000字符左右的截断,大概率是后端Spring MVC的消息转换器或者容器配置限制导致的。给你一步步排查和解决的方案:
第一步:先确认截断发生在后端还是前端
先用Postman或者curl直接请求你的/getAllInvoices接口,查看返回的响应内容是否完整:
- 如果Postman里返回的内容也是截断的,那问题出在后端,继续往下看;
- 如果Postman里是完整的,那要检查AngularJS的请求处理逻辑,比如
$http的响应拦截器、transformResponse有没有意外截断数据,或者浏览器的控制台有没有报错。
第二步:后端Spring MVC的排查与修复
1. 调整Jackson消息转换器的内存限制
Spring MVC默认使用MappingJackson2HttpMessageConverter来序列化Java对象为JSON,它有一个maxInMemorySize参数,早期版本默认值可能在10KB左右,正好对应你遇到的10000字符截断问题。你可以通过配置增大这个值:
如果是Spring Boot项目(Java配置类):
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(); // 设置为10MB,可根据你的实际数据大小调整 jacksonConverter.setMaxInMemorySize(10 * 1024 * 1024); converters.add(jacksonConverter); } }
如果是XML配置的Spring MVC:
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <!-- 设置最大内存缓冲区大小,单位字节 --> <property name="maxInMemorySize" value="10485760"/> </bean> </mvc:message-converters> </mvc:annotation-driven>
2. 检查Tomcat容器的配置
如果调整消息转换器后还是有问题,检查Tomcat的server.xml中Connector的配置,确保没有设置限制响应长度的参数:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxSavePostSize="-1"/> <!-- -1表示不限制请求大小,GET/POST都适用 -->
另外,注意不要设置compression相关参数导致意外截断,比如compressionMinSize设置过小,但一般不会出现固定10000字符的截断情况。
3. 检查自定义过滤器或拦截器
如果项目中自定义了过滤器(比如字符编码过滤器、日志过滤器),检查这些过滤器有没有使用ResponseWrapper或者手动设置了响应长度,导致数据被截断。比如有些过滤器会限制输出缓冲区大小,需要对应调整配置。
第三步:前端AngularJS的排查(如果Postman返回完整)
如果后端返回的响应是完整的,但前端拿到的被截断,检查以下几点:
- 检查
$http请求的配置,有没有错误设置responseType为text而不是默认的json,导致大JSON解析时出错; - 查看浏览器控制台的Network面板,确认响应的Content-Length是否和实际返回的字节数一致,排除浏览器层面的限制;
- 检查是否有响应拦截器(
interceptors)在处理响应时不小心截断了数据。
按照这个流程排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Hitasha Singh
相关产品推荐
相关产品推荐

