java - 如何在 Spring Boot @ResponseBody 中返回 404 响应状态 - 方法返回类型是响应?

标签 java spring http-status-code-404 retrofit

我正在使用 Spring Boot 和基于 @ResponseBody 的方法,如下所示:

@RequestMapping(value = VIDEO_DATA_PATH, method = RequestMethod.GET)
public @ResponseBody Response getData(@PathVariable(ID_PARAMETER) long id, HttpServletResponse res) {
    Video video = null;
    Response response = null;
    video = videos.get(id - 1);
    if (video == null) {
      // TODO how to return 404 status
    }
    serveSomeVideo(video, res);
    VideoSvcApi client =  new RestAdapter.Builder()
            .setEndpoint("http://localhost:8080").build().create(VideoSvcApi.class);
    response = client.getData(video.getId());
    return response;
}

public void serveSomeVideo(Video v, HttpServletResponse response) throws IOException  {
    if (videoDataMgr == null) {
        videoDataMgr = VideoFileManager.get();
    }
    response.addHeader("Content-Type", v.getContentType());
    videoDataMgr.copyVideoData(v, response.getOutputStream());
    response.setStatus(200);
    response.addHeader("Content-Type", v.getContentType());
}

我尝试了一些典型的方法:

res.setStatus(HttpStatus.NOT_FOUND.value());
new ResponseEntity(HttpStatus.BAD_REQUEST);

但我需要返回 Response .

如果视频为空,如何在这里返回 404 状态码?

最佳答案

这很简单,只需抛出 org.springframework.web.server.ResponseStatusException:

throw new ResponseStatusException(
  HttpStatus.NOT_FOUND, "entity not found"
);

它兼容 @ResponseBody 和任何返回值。需要 Spring 5+

关于java - 如何在 Spring Boot @ResponseBody 中返回 404 响应状态 - 方法返回类型是响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422255/

相关文章:

java - 使用列表成员将 JDBC 结果集转换为 java POJO

java - 从类名中检索类的实例

java - 如何关闭spring ApplicationContext?

css - 404 错误空 CSS 文件

java - java中动态定义集合或对象类型变量

java - 打印从文件填充的 ArrayList 时出现 NoSuchElementException

java - Spring boot @Value 不适用于静态字段

java - java把一串音符转成wav文件的步骤是什么

c# - 使用 JSON 响应测试 WCF

html - Heroku Nodejs 服务器 img 文件不断出现 404