![](/img/trans.png)
[英]406 when exception thrown in Spring controller with accept header of text/csv
[英]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.