Spring接口返回对象报错,No converter found for return value of type

正常的SpringBoot项目接口,返回对象或者JSON都是正常,但是加入拦截器后,惊奇的发现只能返回String,返回对象就报 “No converter found for return value of type”,解析器无法转换对象的问题。

网上找了好多解答都是以下几种:

1、缺失Jackson 依赖,如果有 spring-boot-starter-web依赖可排除该问题

2、是否是 POJO (get set 方法是否有)

注释:我使用lombok插件,用@Data注解,所以不可能是这个问题导致的。

3、接口是否有@RestController注解

以上的解决方案都不对,罪魁祸首是拦截器的问题!!!

原本拦截器配置使用的是继承 WebMvcConfigurationSupport导致的。

我原本的拦截器是这样的:

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
}

WebMvcConfigurationSupport在springMvc源码中有相关注解

@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
		ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {}

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class),说明只有当容器中没有WebMvcConfigurationSupport这个类型的组件的时候,才会启动自动配置。

最终我的解决方案是修改拦截器的方式,使用实现WebMvcConfigurer方法。

@Configuration
public class InterceptorConfig implements WebMvcConfigurer{}

 

发布了49 篇原创文章 · 获赞 70 · 访问量 16万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章