我正在使用 Spring Boot 2.0 并在 an 中有一个@RestController
返回 a的端点,DeferredResult
并且在某些情况下(例如,如果不需要计算所需的值)它DeferredResult
直接设置结果,如下所示:
@RequestMapping(value = "test")
public DeferredResult<String> test() {
DeferredResult<String> returnValue = new DeferredResult<>();
returnValue.setResult("Hello, World");
return returnValue;
}
不幸的是,返回的 HTTP 正文是空的。状态码 200 表明请求没有超时,如果我将完成处理程序添加到延迟结果,也会调用该处理程序。
当我显式创建一个新线程并在一小段睡眠后将结果设置在该线程上时,该问题也没有得到解决。
我必须改变什么才能让DeferredResult
实际正确序列化?
编辑:
正如评论中所建议的,我打开了 Spring MVC 的调试日志记录并发现了以下日志消息:
DEBUG org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor - Written [ok] as "text/plain" using [org.springframework.http.converter.StringHttpMessageConverter@6b634d28]
DEBUG org.springframework.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
结果似乎一开始写得正确,但由于某种原因,一个空的 ModelAndView 被返回给 servlet。
什么可能导致这种情况?