Невозможно реализовать простую загрузку файлов с использованием Jersey. Потерялись ошибки зависимостей поднятых при применении начальной загрузке:Невозможно реализовать простую загрузку файлов в Джерси - «аннотируется с POST ресурса, класс не распознается как действительный метод ресурса. Unavailable»
The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1
SEVERE: Method, public javax.ws.rs.core.Response com.foo.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.foo.FS2Resource, is not recognized as valid resource method.
unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
Похоже, что проблема с отображением входных параметров для службы REST? Я прочитал документацию и последовал нескольким примерам, и я не отклоняюсь от этих примеров.
Вот код:
@Path("v1/")
public class FileUploadResource {
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public Response uploadFile(
@FormDataParam("file") InputStream is,
@FormDataParam("file") FormDataContentDisposition detail) {
String name = detail.getFileName();
// do upload stuff
String output = ....
return Response.status(200).entity(output).build();
}
}
я вытащил в "компилировать 'com.sun.jersey.contribs: джерси-многочастному: 1.17.1'" для FormDataParams.
EDIT: Я был в состоянии получить его работу в Джерси, но только в этом более примитивно:
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadFile(final MimeMultipart file) {
if (file == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("Must supply a valid file").build();
try {
for (int i = 0; i < file.getCount(); i++) {
// ... do something with file.getBodyPart(i));
}
return Response.ok("done").build();
} catch (final Exception e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build();
}
}
Это, вероятно, достаточное временное решение, но все-таки хотелось бы, чтобы добраться до нижней части вопрос.
Я на самом деле работает с аналогичной проблемой. У меня есть соответствующая версия всех необходимых jersey jars, и каждый из моих значений FormDataParam отличается, чтобы избежать будущей проблемы с отображением. Тем не менее, у меня все еще есть проблема с загрузкой. Есть ли проблема с использованием комментариев Post и Produces вместе или что-то еще? Единственный метод, с которым я столкнулся, - это мой пост. –
Было упомянуто мной коллегой, что это известная ошибка, и причина, по которой она работает для некоторых, заключается в том, что она связана с конкретным распределением/конфигурацией, с которой вы работаете. –
Ошибка в том, что именно? Аннотации FormDataParam или Джерси? –