Конечная точка загрузки файла должна быть закрыта InputStream? - PullRequest
0 голосов
/ 04 июня 2018
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
    ...
    inputStream.close(); // necessary?
}

Для конечной точки API, которая принимает ввод файла, нужно ли вручную закрывать InputStream или платформа делает это для нас?

Я проверил документы на Джерси, но не смог найти никакой информации об этом.

Ищем достоверный источник или какой-либо способ проверить его.

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

1) после того, как вы использовали InputStream, вы можете предположить, что его безопасно закрыть.

2) Вы также можете зарегистрировать InputStream с помощью Jersey ClosableService, в соответствии с его документацией он закроет InputStream для вас. ClosableService

Надеюсь, это поможет.

0 голосов
/ 29 мая 2019

Я просто удивился тому же и попробовал это в отладчике.Jersey не закрывает для вас поток.

Я думаю, что самый элегантный способ - это использовать try-with-resources, который может принимать произвольные выражения начиная с Java 9, и вызывать close() дляты.

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
...
try (inputStream) {
   //...
} catch (IOException e) {
   //...
}
0 голосов
/ 05 июня 2018

Вы несете ответственность за закрытие InputStream.

Джерси по сути не может знать, когда закрывать ваш поток.

...