Spring迁移到5.0.0取代已弃用的WebMvcConfigurerAdapter是错误的

时间:2017-10-11 20:44:55

标签: java spring spring-mvc

我将Spring框架4.3.9.RELEASE更新为5.0.0.RELEASE,令我惊讶的是,自5.0版本以来,类WebMvcConfigurerAdapter已被标记为已弃用。正如文档所说:

  

弃用。

     从5.0开始,WebMvcConfigurer具有默认方法(由Java 8基线实现),并且可以直接实现而无需此适配器

我尝试更改类定义以实现WebMvcConfigurer

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "net.nichar.app")
public class WebConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
    }
}

我使用Maven导入以下工件,它们都是相同的版本:

  • 弹簧芯
  • 弹簧的web
  • 弹簧webmvc
  • 弹簧ORM

虽然我遵循Spring的设计,但我必须做错事,因为只要我尝试运行应用程序,就会抛出错误:

  

2017-10-11 22:42:03 [localhost-startStop-1] WARN在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名称为'的bean时出错requestMappingHandlerAdapter'在org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration中定义:通过工厂方法的Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]:工厂方法' requestMappingHandlerAdapter'抛出异常;嵌套异常是java.lang.NoClassDefFoundError:com / fasterxml / jackson / databind / exc / InvalidDefinitionException

     

2017年10月11日10:42:03 ODP。 org.apache.catalina.core.StandardContext listenerStart   SEVERE:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例的异常   org.springframework.beans.factory.BeanCreationException:创建名称为' requestMappingHandlerAdapter'在org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration中定义:通过工厂方法的Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]:工厂方法' requestMappingHandlerAdapter'抛出异常;嵌套异常是java.lang.NoClassDefFoundError:com / fasterxml / jackson / databind / exc / InvalidDefinitionException       在.......

你能帮我解决一下吗?随意需要更多细节。

1 个答案:

答案 0 :(得分:2)

此问题与WebMvcConfigurer无关(您应该从问题中删除该部分,因为这会误导其他人)。

杰克逊的例外情况,你很可能没有使用正确的杰克逊版本:

java.lang.NoClassDefFoundError: 
com/fasterxml/jackson/databind/exc/InvalidDefinitionException

Spring Framework 5需要Jackson 2.9 +,as stated in the migration documentation