Получение InputStream возможно в JAX-RS.Вы просто помещаете параметр InputStream без аннотаций:
@POST
public void uploadImage(InputStream stream) {
// store image
}
Обратите внимание, что он будет работать для любого типа контента.
Хотя он будет работать, я бы предложил более "JAX-RS"":
1 Создать провайдера, который создаст класс изображения (например, java.awt.Image) из InputStream:
@Provider
@Consumes("image/jpeg")
class ImageProvider implements MessageBodyReader<Image> {
public Image readFrom(Class<Image> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType,
MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) throws IOException,
WebApplicationException {
// create Image from stream
}
}
2 Зарегистрируйте провайдера так же, как вы регистрируете ресурс.
3 Заставьте ваш класс ресурсов получать Image вместо InputStream.
Почему этот подход лучше?
Вы отделяете логику десериализации от вашего класса ресурсов.Поэтому, если в будущем вы захотите поддерживать больше форматов изображений, вам просто нужно добавить дополнительных поставщиков, в то время как ресурс останется прежним.