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

完整的未来<ResponseEntity>状态代码期望

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

    因此,我创建了一个控制器,其中有一个POST端点,如下所示:

    @PostMapping("/foo/{some-field}")
    public CompletableFuture<ResponseEntity> foo() {
        //Do some operations...
        ...
        if(doesNotExist({some-field})) {
            return CompletableFuture.completedFuture(ResponseEntity.notFound().build());
        }
        return CompletableFuture.completedFuture(ResponseEntity.ok().build());
    }
    

    doesNotExist({some-field}) == true ,系统会提示我 NOT_FOUND 状态。 但是我最终得到了一个 OK 每一次的状态。

    ResponseEntity 是否返回? 有什么建议吗 找不到 状态如果 非常感谢。

    编辑/更新

    从评论中我认为我的第一个问题有点浅显,所以让我解释一下 ResponseEntity.HttpStatus 会是正确的。

    我对上面的代码块做了一些小的调整。 当我试图测试 找不到

    合同示例如下:

    Contract.make {
      request {
        method 'POST'
        url "/foo/SomeNoneExistingField"
        body("{}")
        headers {
          contentType applicationJson()
        }
      }
      response {
        status HttpStatus.NOT_FOUND.value()
      }
    }
    

    所以 {some-field} doesNotExist({some field})==真 . 如果我也调试我的代码,我看到它最终会出现在这个块中。 尽管如此,Spring Cloud的契约测试状态 response.status == OK 找不到 .

    如果我假设 HttpStatus 从一个 CompletableFuture 是正确的吗? 任何帮助/建议都非常感谢。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Alien    6 年前

    这里没有什么复杂的东西,它应该按预期工作。

    可能是因为 {some-state}

    确保 {某种状态} true 编译器将 if 封锁。

    if({some-state}) {
       return CompletableFuture.completedFuture(ResponseEntity.notFound().build());
    }
    
        2
  •  0
  •   Didier L    6 年前

    学分 @Marcin Grzejszczak

    我缺少的是能够处理异步结果的契约,比如 CompletableFuture ,我需要补充的是 async() 为了我的结果。

    因此,这样的合同:

    Contract.make {
      request {
        method 'POST'
        url "/foo/SomeNoneExistingField"
        body("{}")
        headers {
          contentType applicationJson()
        }
      }
      response {
        status HttpStatus.NOT_FOUND.value()
        async() // <---- This was it!
      }
    }