使用版本:spring boot 1.5.21


问题:在scala中配置对jackson的 `com.fasterxml.jackson.databind.Module` 进行配置但是始终无法将实体正确的转换。


解决:在spring boot时不要使用@EnableWebMvc注解。


查询过程:通过不断调试初始化的过程,发现在实例化spring boot的自动配置类之前就对mvc进行初始化。


心得:其实应该多看下官方文档,简单的几行就能说明问题,不要相信记忆,因为记忆会变,重要的是版本也会变,而且要注意在查看文档时要先看spring boot的版本,再看spring framework的文档。


附带spring boot部分翻译:


27.1.1 Spring MVC 自动化配置
Spring Boot 对 Spring MVC 提供自动化配置,并且在大多数的应用中运行良好。


基于Spring默认设置的基础上增加下列特性:

  • 包括实例 ContentNegotiatingViewResolver 和 BeanNameViewResolver 。

  • 支持静态资源,包括支持WebJars。

  • 自动注册 Converter, GenericConverter, Formatter 的实例。

  • 支持 HttpMessageConverters。

  • 支持静态 index.html 。

  • 定制 Favicon 图片。

  • 自动使用 ConfigurableWebBindingInitializer 。


如果你想保持这些特性,并且增加额外的 MVC 配置(拦截器,格式器,视图控制器,等等),你需要在 自己的 WebMvcConfigurerAdapter 类上增加 @Configuration 注解,但是注意不要增加@EnableWebMvc 。如果希望自定义 RequestMappingHandlerMapping,RequestMappingHandlerAdapter 或 ExceptionHandlerExceptionResolver,可以声明 WebMvcRegistrationsAdapter 实例来提供相关组件。
如果希望对Spring MVC进行完全自主配置,可以在增加 @Configuration 注解的情况下额外再增加 @EnableWebMvc 。


附上scala的在Spring Boot Mvc 下的 jackson 配置

import com.fasterxml.jackson.databind.Module
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import org.springframework.context.annotation.{Bean, Configuration}

@Configuration
class WebMvcConfig {
    
    @Bean
    def defaultScalaModule():Module = {
        DefaultScalaModule
    }
}