【问题标题】:Spring @ResponseStatus returns empty responseSpring @ResponseStatus 返回空响应
【发布时间】:2017-08-29 10:13:27
【问题描述】:

在我的 Spring API 中,我想使用 Spring 的注释 @ResponseStatus 处理来自创建、放置和删除等操作的响应。每个端点都能正常工作,但它们总是返回空响应。

为什么来自注释端点的响应是空的?

控制器:

import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.http.HttpStatus;

@RestController
@RequestMapping(value = "/v1/portfolios")
public class PortfolioController {

    @RequestMapping(method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public void create(@RequestBody Portfolio resource) {
        repo.save(resource);
    }   

    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.OK)
    public void delete(@PathVariable("id") String id) {
        repo.removeById(id);
    }

}

【问题讨论】:

  • 响应为空,因为您没有从 void 方法返回任何内容。但空响应应与相应的 http 状态代码一起传递。你检查了吗?

标签: java spring rest spring-mvc httpresponse


【解决方案1】:

为什么来自注释端点的响应是空的?

因为您的方法返回 void(表示没有正文)。状态码 - 它不是正文。

你可以尝试这个来返回带有显式消息的响应:

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public ResponseEntity<String> delete(@PathVariable("id") String id) {
   repo.removeById(id);
return new ResponseEntity<>("Your message here", HttpStatus.OK);
    }

你可以输入ResponseEntity&lt;YourCustomObject&gt;,而不是ResponseEntity&lt;String&gt;,然后返回new ResponseEntity&lt;&gt;(yourCustomObject instance, HttpStatus.OK);,它将在响应期间转换为JSON。

你也可以这样做:

@ResponseStatus(value = HttpStatus.OK, reason = "Some reason")

在这种情况下,您将返回如下内容:

{
    "timestamp": 1504007793776,
    "status": 200,
    "error": "OK",
    "message": "Some reason",
    "path": "/yourPath"
}

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2022-10-25
    • 1970-01-01
    • 2020-01-18
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多