簡體   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