代码之家  ›  专栏  ›  技术社区  ›  rodalfus

直接设置延迟结果不返回正文

  •  0
  • rodalfus  · 技术社区  · 6 年前

    我使用的是springboot2.0,并且在 @RestController 返回一个 DeferredResult 需要计算)它设置的结果 延迟结果

      @RequestMapping(value = "test")
      public DeferredResult<String> test() {
        DeferredResult<String> returnValue = new DeferredResult<>();
        returnValue.setResult("Hello, World");
        return returnValue;
      }
    

    不幸的是,返回的HTTP主体是空的。状态代码200表示请求没有被执行 超时,如果我向延迟的结果添加了一个完成处理程序,这个处理程序也会被调用。

    我需要改变什么才能让 延迟结果 是否正确序列化?

    编辑:

    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。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Lucas Holt    5 年前

    你有ETag在用吗?我们让这一切发生

    ShallowEtagHeaderFilter.disableContentCaching(request); 
    

    对控制器来说,这个方法似乎解决了这个问题。

        2
  •  0
  •   locus2k    6 年前

    @ResponseBody 您的方法:

    @RequestMapping(value = "test")
    public @ResponseBody DeferredResult<String> test() {
      DeferredResult<String> returnValue = new DeferredResult<>();
      returnValue.setResult("Hello, World");
      return returnValue;
    }
    

    @响应体 注释告诉控制器对象 HttpResponse对象。

    https://www.baeldung.com/spring-request-response-body