一、什麼是resourcenotfound異常
當我們打開一個鏈接或是想要獲取某個資源時,如果伺服器資料庫找不到該資源,就會返回一個resourcenotfound異常。這個異常通常會給出一個HTTP狀態碼404和相應的錯誤信息。resourcenotfound異常可以在前端頁面和後端代碼中出現,對於開發者來說,需要及時定位問題並進行解決。
二、resourcenotfound異常出現的原因
resourcenotfound異常通常是由於以下原因引起的:
1、資源未上傳或文件名錯誤
2、鏈接錯誤或失效
3、資料庫不存在該資源
4、許可權不足或網路錯誤
當我們遇到這個異常時,需要仔細排查問題,找出具體原因,從而進行解決。
三、如何解決resourcenotfound異常
解決resourcenotfound異常的方法取決於出現這個異常的原因。
1、檢查資源是否上傳,並確認文件名是否正確
@RequestMapping(value = "/uploads/documents/{fileName:..+}", method = RequestMethod.GET) public ResponseEntity download(@PathVariable("fileName") String fileName) { Resource resource = fileStorageService.loadFileAsResource(fileName); return ResponseEntity .ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"") .body(resource); }
在這個代碼示例中,文件名傳進loadFileAsResource()方法,如果文件名錯誤或文件不存在,就會出現resourcenotfound異常。我們可以在loadFileAsResource()方法中加入邏輯,判斷文件存在與否,如下所示:
@Override public Resource loadFileAsResource(String fileName) { try { Path filePath = this.fileStorageLocation.resolve(fileName).normalize(); Resource resource = new UrlResource(filePath.toUri()); if(resource.exists()) { return resource; } else { throw new FileNotFoundException("File not found " + fileName); } } catch (MalformedURLException ex) { throw new FileNotFoundException("File not found " + fileName); } }
在這個方法中,我們使用Path類檢查傳進來的文件名是否與文件夾中的文件名一致,如果不一致就拋出異常FileNotFoundException。
2、檢查鏈接並確認其是否有效
如果鏈接失效或錯誤,我們需要檢查其正確性。可以在瀏覽器中嘗試打開這個鏈接,查看伺服器返回的信息。如果確實存在該資源,需要確認許可權是否正確。
3、查詢資料庫查看是否存在該資源
在資源未上傳之前,資料庫中是不會存在該資源的,因此我們需要確認該資源是否已經被上傳到資料庫並且是否可以正常訪問。在錯誤信息中可以查看到資源名字和路徑,可以依此檢查資料庫中是否存在該資源。
4、檢查許可權和網路
網路錯誤會導致伺服器找不到該資源,因此我們需要先確認網路是否正常。如果網路正常,可以檢查許可權是否設置正確。對於後台開發者來說,可以檢查代碼中是否存在語法錯誤等。
四、總結
resourcenotfound異常是常見的網路問題,但是處理起來並不複雜。只要我們對出現異常時的排查方法熟練掌握,就可以快速的解決問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279692.html