【问题标题】:Spring migration to 5.0.0 replacing deprecated WebMvcConfigurerAdapter is erroneousSpring 迁移到 5.0.0 替换已弃用的 WebMvcConfigurerAdapter 是错误的
【发布时间】:2017-10-11 20:44:55
【问题描述】:

我将 Spring Framework 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 导入以下工件,它们都是相同的版本:

  • 弹簧芯
  • 弹簧网
  • spring-webmvc
  • spring-orm

虽然我遵循了 Spring doumention,但我一定做错了,因为一旦我尝试运行应用程序,就会抛出错误:

2017-10-11 22:42:03 [localhost-startStop-1] WARN 上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名称为“requestMappingHandlerAdapter”的 bean 定义时出错在 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 严重:向类 org.springframework.web.context.ContextLoaderListener 的侦听器实例发送上下文初始化事件的异常 org.springframework.beans.factory.BeanCreationException:创建 org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration 中定义的名称为“requestMappingHandlerAdapter”的 bean 时出错:通过工厂方法进行 bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]:工厂方法“requestMappingHandlerAdapter”抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException 在......

你能帮我解决它吗?随时要求更多详细信息。

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

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

    异常指向 Jackson,您很可能没有使用正确的 Jackson 版本:

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

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

    【讨论】:

    • 谢谢,我试试。我对 WebMvcConfigurer 的假设是基于 WebMvcConfigurerAdapter 弃用。这就是我开始困惑的地方。
    猜你喜欢
    • 2020-08-17
    • 2023-03-31
    • 2015-09-04
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多