Spring 弹簧启动响应非200状态代码的实体缺失

Spring 弹簧启动响应非200状态代码的实体缺失,spring,spring-boot,kotlin,Spring,Spring Boot,Kotlin,TLDR如何使用SpringResponseEntity在正文中发送文本消息和304状态代码 上下文 我正在用Spring boot编写RESTAPI。在某些端点中,我希望返回: 无论是状态200正常还是车身成功 或状态304未修改,正文未修改。 我的端点以以下方式使用ResponseEntity(在kotlin中): @PutMapping("/test") fun modifyStuff(): ResponseEntity<String> { if (someCond

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

上下文

我正在用Spring boot编写RESTAPI。在某些端点中,我希望返回:

  • 无论是状态
    200正常
    还是车身
    成功
  • 或状态
    304未修改
    ,正文
    未修改。
我的端点以以下方式使用
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)
}
@PutMapping(“/test”)
fun modifyStuff():ResponseEntity{
如果(某些条件)
//“未修改”未在正文中发送
返回响应属性(“未修改”,HttpStatus.not_modified)
//使用OK,它可以工作
返回响应状态(“成功”,HttpStatus.OK)
}
问题


每当我创建带有状态代码的
响应属性时!=200,正文未发送(空正文)。将
HttpStatus
更改为
OK
会使消息再次显示。。。我不想为not modified创建错误处理程序,因为这绝对不是一个错误。

之前有早期的标准RFC2616,现在您可以参考较新的RFC 7230-7237,它们都提到304响应不应包括body

尤其是较旧的RFC2616表示“不得包含正文”,而较新的RFC7230表示“所有1x(信息)、204(无内容)和304(未修改)响应均不包含消息正文。” 最后,一些服务器可能会发送或接受具有此状态的正文,但spring ResponseEntity的情况并非如此。

每个304响应不应包含正文。