#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);
}