非200状态代码缺少Spring-boot ResponseEntity主体

时间:2019-12-23 09:32:37

标签: spring spring-boot kotlin

TLDR; 如何使用Spring ResponseEntity在正文中发送文本消息以及304状态代码?

上下文

我正在用Spring-boot编写REST API。在某些端点中,我想返回:

  • 状态200 OK和正文Success
  • 或状态为304 NOT MODIFIED且正文为Not modified.

我的端点通过以下方式使用ResponseEntity(在kotlin中):

@PutMapping("/test")
fun modifyStuff(): ResponseEntity<String> {
    if (someCondition)
        // "not modified" not sent in the body
        return ResponseEntity("not modified", HttpStatus.NOT_MODIFIED)

    // using OK, it works
    return ResponseEntity("success", HttpStatus.OK)
}

问题

每当我创建状态代码为== 200的ResponseEntity时,都不会发送正文(空正文)。将HttpStatus更改为OK会使消息再次显示...我不想创建未修改的错误处理程序,因为这绝对不是错误。

1 个答案:

答案 0 :(得分:0)

早期有较早的标准RFC2616,现在您可以参考较新的 RFC 7230-7237 ,并且他们俩都提到304响应不应包含正文。

具体而言,较旧的RFC2616表示其“不得包含正文”,而较新的RFC7230则表示“所有1xx(信息性),204(无内容)和 304(未修改)响应均不包含消息正文 ” 最后,某些服务器可能会发送或接受具有此状态的主体,但Spring ResponseEntity并非如此。