Исключение Spring FileSystemResource NoSuchFileException

#java #spring #spring-boot #kotlin #spring-webflux

#java #spring #весенняя загрузка #kotlin #spring-webflux

Вопрос:

Я использую FileSystemResource и Spring Webflux для обслуживания файлов с жесткого диска.

 @GetMapping("/news/file")
fun getImage(@RequestParam name: String): FileSystemResource {
    return FileSystemResource(propsStorage.path   "/"   name)
}
  

Когда пользователь запрашивает неизвестный файл, он должен быть перехвачен и должна быть возвращена ошибка 404.

Однако я получаю эту ошибку:

 java.nio.file.NoSuchFileException: C:UsersSomeUserWorkposts32.jpg
    at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
  

К сожалению, я не знаю, как перехватить ошибку.
Вы можете ответить на Java, если хотите, я могу понимать оба языка.

Ответ №1:

Также вы можете использовать метод spring FilesystemResource api exists, чтобы избежать FileNotFoundException

  fs =FileSystemResource(propsStorage.path   "/"   name)
if(fs.exists())
 return fs
else
return new ResponseEntity<>("File Not Found", HttpStatus.NOT_FOUND);
  

Также я видел, что вы использовали ‘/’ в качестве разделителя, пожалуйста, обратите внимание, что на компьютерах с Windows разделителем файлов является «. Итак, для правильного соответствия используйте Paths.separator

Ответ №2:

У вас может быть @ExceptionHandler метод для java.nio.file.NoSuchFileException и возвращать ответ 404.

Ниже на Java вы можете перевести в kotlin.

 @ExceptionHandler(NoSuchFileException.class)
public ResponseEntity<String> handleUnexpectedRollbackException(NoSuchFileException exception) {
    LOGGER.error("File not found",exception);
    return new ResponseEntity<>("File Not Found", HttpStatus.NOT_FOUND);
}