Spring RestController:Rest Controller中引发异常时的HTTP 406

我有一个RestEnd点,它返回带有byte []有效负载的ResponseEntity,即下面的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,因此它是不兼容的。这是我的理解。

任何人都可以暗示我的理解是正确的,如果是,我该如何解决。

kxkxkxkx 回答:Spring RestController:Rest Controller中引发异常时的HTTP 406

您应该具有该异常的处理程序,该处理程序处理该异常以返回所需的值。 This可能有帮助

,

有你的变态:

@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);
    }
  }
本文链接:https://www.f2er.com/2906493.html

大家都在问