详述resourcenotfound异常

发布时间:2023-05-20

一、什么是resourcenotfound异常

当我们打开一个链接或是想要获取某个资源时,如果服务器数据库找不到该资源,就会返回一个resourcenotfound异常。这个异常通常会给出一个HTTP状态码404和相应的错误信息。resourcenotfound异常可以在前端页面和后端代码中出现,对于开发者来说,需要及时定位问题并进行解决。

二、resourcenotfound异常出现的原因

resourcenotfound异常通常是由于以下原因引起的:

  1. 资源未上传或文件名错误
  2. 链接错误或失效
  3. 数据库不存在该资源
  4. 权限不足或网络错误
    当我们遇到这个异常时,需要仔细排查问题,找出具体原因,从而进行解决。

三、如何解决resourcenotfound异常

解决resourcenotfound异常的方法取决于出现这个异常的原因。

  1. 检查资源是否上传,并确认文件名是否正确
@RequestMapping(value = "/uploads/documents/{fileName:..+}", method = RequestMethod.GET)
public ResponseEntity<Resource> 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 异常是常见的网络问题,但是处理起来并不复杂。只要我们对出现异常时的排查方法熟练掌握,就可以快速的解决问题。