正常的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{}