簡體   English   中英

如何獲取Spring REST文件下載以返回404?

[英]How can I get a Spring REST file download to return 404?

我有一個簡單的REST API,具有文件下載功能。 端點的定義如下:

@RequestMapping(value = "/myapi/files/{fileName}", 
    method = RequestMethod.GET, 
    produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
@ResponseBody FileSystemResource downloadFile(String fileName) 
    throws UnknownFileException;

當前實現方法的要點是:

try {
    FileSystemResource fsr = 
        new FileSystemResource("C:/myfiles/" + fileName + "." + suffix);
} catch (Throwable e) {
    throw new UnknownFileException();
}

我有一個簡單的異常處理程序,它返回404。

@ExceptionHandler(UnknownFileException.class)
@ResponseBody
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorMessage handleUnknownFileException(
        UnknownFileException e, HttpServletRequest req) {
    return new ErrorMessage(e);
}

這些異常處理程序可以很好地用於其他返回XML / JSON響應的操作。 我遇到的麻煩是,當此方法引發異常時,它似乎被Spring ResourceHttpMessageConverter攔截,該異常將500錯誤返回給客戶端。

所以我的問題是我如何確保返回HTTP 404而不是通用500?

編輯-堆棧跟蹤下面的值:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.....UnknownFileException: Unable to find file
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:88)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

您可能想要執行以下操作:

response.setStatus(HttpStatus.NOT_FOUND.value());

當然,您需要將HttpServletResponse添加到方法聲明中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM