Spring 5.0.0.M3调用ApplicationEventListener时出错:No ServletContext set - 在上下文初始化期间遇到异常

时间:2017-08-29 16:46:48

标签: java spring maven spring-mvc

今天我决定从最新的Spring 4.3官方版本切换到春季5.0.0.M3,感谢他对junit多线程内置可能性的支持,以及它的Flux gestion,听起来非常有趣。

花了一整天玩我的pom.xml试图弄清楚为什么它不起作用我终于设法让它工作,至少我认为,mvn test命运行正常并为所有输出一个BUILD SUCCESS我的一百个单元测试。尽管应用程序无法启动,但它给了我这个奇怪的错误:

stringi

我在这里发现了一些非常类似的错误,并通过搜索谷歌,但问题是它总是来自另一个bean的错误,无法用非常明确的消息启动。在我的情况下,它说servlet上下文没有设置我可以理解会有问题,但我不明白为什么它没有设置?任何人都有线索?非常感谢你们未来的帮助!

下面是我的pom.xml,它肯定可能是所有这一切的原因:

library(stringi)
s <- "abcdepzxtru"

substr(s,1,5) <- stri_reverse(substr(s,1,5))

s
[1] "edcbapzxtru"

PS:抱歉把日志作为一个javascript片段,但我无法弄清楚如何在这里打印整个堆栈跟踪而不说它我必须在每行前面添加4个空格。

1 个答案:

答案 0 :(得分:1)

在尝试分享一个不起作用的例子时,我发现这一个按预期工作。因此,我试图评论我的配置类的一些部分,并设法使弹簧启动。实际上问题如下: 扩展WebMvcConfigurationSupport类的My Spring Configuration类包含

public void addInterceptors(InterceptorRegistry registry);

我出于某些自定义原因使用此方法添加customHandlerInterceptor。 问题是这个拦截器是在另一个conf类中声明的bean,我曾经使用@Autowired注释在这个实际的类中获取它。由于我忽略的原因,这曾经与以前的Spring版本一起工作但现在它不再...我通过在这个类中声明这个给我所有这些问题的bean来设法得到这个bean而不是@Autowired注释。启动现在运行正常,除了每次请求我都收到404错误: 例如

2017-08-30 16:43:03.379 WARN 18584 --- [nio-8082-exec-4] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/v1/admin/validate] in DispatcherServlet with name 'dispatcherServlet'

编辑 -

映射实际上有效,但是在Spring 4.3中,它曾经在每个端点的名称之前考虑“/ v1”,这个参数是在application.properties中给出的,我认为它没有被考虑在内。似乎swagger文档插件尚未支持新的spring版本,因为整个文档只是不加载并在重定向上发送404。 除此之外,我的处理程序现在没有正确注册,但我想这是因为我的最新修改做错了所以我需要先解决这个问题。

编辑2 -

我已经读过,在Spring 5中你必须用“extends WebMvcConfigurerSupport”类替换“extends WebMvcConfigurerAdapter”,因为第一个被弃用了,但是这对我不起作用而我必须实现WebMvcConfigurer。现在一切都按预期工作正常(包括招摇)。另外,要修改contextPath,您必须在application.properties中修改此参数:“server.servlet.context-path”而不是最后一个支持的“server.contextPath”