Spring MVC REST服务返回ArrayList时转JSON失败 无对应转换器
报错根因
抛出No converter found for return value of type: class java.util.ArrayList的核心原因是Spring MVC的消息转换器列表中,没有注册能够将Java对象、集合类型序列化为JSON的MappingJackson2HttpMessageConverter。哪怕已经引入Jackson依赖,没有正确触发Spring的MVC注解驱动配置时,这套自动注册逻辑不会生效。
这也正好匹配当前现象:Web端视图交互完全正常,只有REST JSON接口报错——因为视图渲染流程不需要消息转换器参与,不会触发对应的校验逻辑,只有@ResponseBody标注的接口在处理返回值时,才会走到消息转换器的匹配流程。
需要补充的修复配置
- 校验核心配置类
WebMvcConfig的注解标识
目前的WebAppInitializer虽然加载了WebMvcConfig,但如果这个类只是普通的@Configuration,没有添加@EnableWebMvc注解,Spring MVC就不会自动装配默认的消息转换器集合。@EnableWebMvc注解的作用等价于XML配置时代的<mvc:annotation-driven/>,会自动检测classpath下的Jackson库,完成JSON消息转换器的自动注册。注意不要让WebMvcConfig继承WebMvcConfigurationSupport后又没有覆盖对应转换器配置,同样会导致自动装配逻辑失效。 - 补全Jackson依赖的完整链路
当前pom只引入了jackson-core和jackson-databind,显式补充同版本的jackson-annotations依赖,避免类加载缺失导致转换器初始化失败:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.11.3</version> </dependency> - 校验Controller层的注解使用
从错误栈可以判断接口已经走到了@ResponseBody的处理逻辑,不需要额外调整注解,但需要确认:如果是普通@Controller标注的类,返回JSON的方法不能遗漏@ResponseBody;如果使用@RestController标注类,不需要在每个方法上重复加@ResponseBody,因为它已经聚合了@Controller和@ResponseBody的语义。 - 兜底配置:手动显式注册消息转换器
如果添加@EnableWebMvc后问题仍未解决,可以在WebMvcConfig实现WebMvcConfigurer接口,重写配置方法手动注册Jackson转换器:@Configuration @EnableWebMvc public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // 注册Jackson JSON序列化转换器 MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(); jacksonConverter.setObjectMapper(new ObjectMapper()); converters.add(jacksonConverter); // 保留基础类型的内置转换器 converters.add(new StringHttpMessageConverter()); converters.add(new ByteArrayHttpMessageConverter()); } }
内容的提问来源于stack exchange,提问作者Avishek
相关产品推荐
相关产品推荐

