繁体   English   中英

Spring RestController:Rest Controller 中抛出异常时的 HTTP 406

[英]Spring RestController: HTTP 406 when an exception is thrown in Rest Controller

我有一个 RestEnd 点,它返回带有 byte[] 负载的ResponseEntity<byte[]> ,即下面的ResponseEntity<byte[]>示例片段:

@GetMapping(value = { "/image/{id}" , produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
public ResponseEntity<byte[]> getImage() {

   // some logic

   byte[] bytes = fetchImageService.getImage(id):
   if(imageFound) {
       return new ResponseEntity<byte[]> (bytes,headers,HttpStatus.OK);
   }
   else {

         throw new ImageNotFoundException(Cannot find file);
   }
}

当图像存在时,它返回 ResponseEntity,但是当图像不存在时,它会抛出(不返回)业务异常。

在我的休息客户端中,我专门使用标题“accept: application/octet-stream”。

对于异常情况,我从服务器获得 HTTP 406 响应。 我想这是由于抛出异常时,它被构建为JSON object并且由于 PRODUCES 是application/octet-stream ,因此它不兼容。 这是我的理解。

任何人都可以建议我的理解是正确的,如果是这样,我该如何解决这个问题。

您应该有一个处理该异常的处理程序以返回您想要的值。 可能有帮助

有你的变态:

@GetMapping(value = { "/image/{id}"} , produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
  public ResponseEntity<byte[]> getImage(HttpServletResponse response) throws Exception {
    if (true) {
      response.setStatus(404);
      response.setHeader("Content-type", "application/octet-stream");
      response.flushBuffer();

      throw new Exception();
    } else {

      return new ResponseEntity<>(HttpStatus.OK);
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM