Spring boot SpringBoot2控制器返回一个可调用的http响应,但http响应仍然为空

Spring boot SpringBoot2控制器返回一个可调用的http响应,但http响应仍然为空,spring-boot,Spring Boot,我正在将SpringBoot1.5项目迁移到SpringBoot2.1.8(JDK1.8,Kotlin1.3.50) 我有几个控制器,其方法如下所示: @PostMapping("post") fun post(@RequestBody input: String): Callable<JsonNode> { return Callable { requestAsJson(input) } } 所以我觉得这很好,但仍然没有收到响应(使用Curl或Po

我正在将SpringBoot1.5项目迁移到SpringBoot2.1.8(JDK1.8,Kotlin1.3.50)

我有几个控制器,其方法如下所示:

@PostMapping("post")
fun post(@RequestBody input: String): Callable<JsonNode> {
    return Callable {
        requestAsJson(input)
    }
}
所以我觉得这很好,但仍然没有收到响应(使用Curl或Postman进行测试)

我现在有点不知所措,因为它在Spring Boot 1.5中像一个魔咒一样工作,我试图得到一个关于如何摆脱这个问题的提示

谢谢你的帮助,
Damien

我在我的
WebMVCConfigure
中以以下方式声明了一个
ShallowEtagHeaderFilter
bean:

@Bean
fun shallowEtagHeaderFilter(): ShallowEtagHeaderFilter {
   return ShallowEtagHeaderFilter()
}
虽然这在Spring Boot 1.5中运行良好,但这会导致控制器异步方法(返回可调用的
)不再返回任何内容。为SpringBoot2.1删除此bean将恢复正常行为


我仍然需要寻找一种获得电子标签的方法,但现在,这解决了当前的问题。

从Spring Boot 2.1开始,现在有一个预配置的任务执行器,用于处理这些异步请求。在此之前,它不存在,将使用默认的任务执行器。这可能是干扰。我希望线程由
task-*
线程处理(AFAIK是任务执行者使用的名称)。您是否在以前的应用程序中对异步处理进行了一些配置?在Spring Boot 1.5版本中,没有进行任何特定的设置来支持异步请求,我认为可以保持这种方式。根据一些建议,我在
WebMVCConfigure
中添加了我自己的任务执行器:覆盖有趣的配置异步支持(configurer:AsyncSupportConfigurer){val executor=taskExecutorBuilder.build()executor.initialize()configurer.setTaskExecutor(executor)}但这不会改变任何事情-正确调用控制器方法,代码在单独的线程上正确异步运行,完成后,Spring MVC将返回结果。但是,返回给客户端的最终答案仍然为空(内容长度为0)异步代码确实是由
task-1
线程管理的。通过在Spring MVC层中进行一些深入调试,我可以看到正确的消息被写入Servlet输出消息中,包含正确的内容和所有内容。但是,MVC堆栈中稍后必须发生某些事情…仍在调试…您需要添加
FilterRegistra并为筛选器启用异步处理。仅在FilterRegistrationBean中启用异步似乎对ShallowEtagHeaderFilter无效
@Bean
fun shallowEtagHeaderFilter(): ShallowEtagHeaderFilter {
   return ShallowEtagHeaderFilter()
}