Spring 弹簧启动响应非200状态代码的实体缺失
TLDR如何使用SpringSpring 弹簧启动响应非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
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响应不应包含正文。