Spring @ResponseStatus returns 空响应

Spring @ResponseStatus returns empty response

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

为什么带注释的端点的响应为空?

控制器:

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);
    }

}

Why response from annotated endpoints is empty?

因为你的方法return void(意味着没有body)。状态代码 - 它不是 body.

您可以尝试使用此方法 return 回复消息明确:

@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<String>你可以输入ResponseEntity<YourCustomObject>然后return new ResponseEntity<>(yourCustomObject instance, HttpStatus.OK);它会在响应期间转换成JSON。

你也可以这样做:

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

在这种情况下,您将 return 像这样:

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