Краткая версия вопроса:
Используя Джерси, как я могу определить тип @Produces
во время выполнения?
Расширенная версия вопроса:
Я написал вызов REST с использованием jersy следующим образом:
@GET
@Path("/getVideo")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_OCTET_STREAM, MediaType.APPLICATION_JSON})
public Response getAllVideos(@QueryParam("videoID") Long videoID) throws ApiException, SQLException {
--some code--
Response r ...;
return r;
}
Если пользователь предоставляет действительный videoID
, тогда он должен вернуть файл mp4
, следовательно, @Produces({MediaType.APPLICATION_OCTET_STREAM,
. Однако, если выбрано исключение, например неверное предоставление videoID
, я хочу вернуть json
, описывающее исключение.
В настоящее время он работает так: если указан действительный идентификатор, он возвращает 200
с файлом mp4. Но если генерируется исключение, оно отвечает 500
и сообщением Could not find MessageBodyWriter for response object of type: com.my.package.Errors$CustomError of media type: application/octet-stream
.
На основе документации Джерси тип возвращаемого ответа определяется accept
тип запроса.
Моя проблема в том, что я не знаю заранее при отправке запроса, какой тип ответа я хочу получить обратно (потому что я надеюсь, что запрос будет успешным). Вместо этого я хочу определить тип ответа во время выполнения в зависимости от того, было ли создано исключение.
Как я могу это сделать?
(я думаю, что мой вопрос похож на этот вопрос , но я не использую Spring).