直接设置延迟结果不return一个主体
Directly setting deferred result does not return a body
我正在使用 Spring Boot 2.0 并且在 @RestController
中有一个端点 returns 和 DeferredResult
并且在某些情况下(例如,如果想要的值 [= =33=]not 需要计算)它直接在 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
一开始结果似乎是正确的,但后来由于某种原因向 servlet 返回了一个空的 ModelAndView。
这可能是什么原因造成的?
我相信您必须将 @ResponseBody
添加到您的方法中:
@RequestMapping(value = "test")
public @ResponseBody DeferredResult<String> test() {
DeferredResult<String> returnValue = new DeferredResult<>();
returnValue.setResult("Hello, World");
return returnValue;
}
The @ResponseBody annotation tells a controller that the object
returned is automatically serialized into JSON and passed back into
the HttpResponse object.
你有使用电子标签吗?我们发生了这种情况并添加了
ShallowEtagHeaderFilter.disableContentCaching(request);
控制器方法似乎解决了这个问题。
我正在使用 Spring Boot 2.0 并且在 @RestController
中有一个端点 returns 和 DeferredResult
并且在某些情况下(例如,如果想要的值 [= =33=]not 需要计算)它直接在 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
一开始结果似乎是正确的,但后来由于某种原因向 servlet 返回了一个空的 ModelAndView。
这可能是什么原因造成的?
我相信您必须将 @ResponseBody
添加到您的方法中:
@RequestMapping(value = "test")
public @ResponseBody DeferredResult<String> test() {
DeferredResult<String> returnValue = new DeferredResult<>();
returnValue.setResult("Hello, World");
return returnValue;
}
The @ResponseBody annotation tells a controller that the object returned is automatically serialized into JSON and passed back into the HttpResponse object.
你有使用电子标签吗?我们发生了这种情况并添加了
ShallowEtagHeaderFilter.disableContentCaching(request);
控制器方法似乎解决了这个问题。