Witam,
Mam problem, z którym nieskutecznie walczę już od kilku godzin, dlatego już zrezygnowany zwracam się z prośbą o pomoc do kogoś z Was. Kod specjalnie uprościłem, aby lepiej się go czytało.
Aplikacja działa z wykorzystaniem Jersey (2.28) i na kontenerze Tomcat (9). Muszę napisać możliwość wysłania pliku za pomocą RESTa. Na froncie mam prosty formularz, przez który się wybiera i wysyła wskazany plik.
<form action="webapi/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Wyślij" />
</form>
Na backendzie mam klasę, która ma przechwycić żądanie:
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public class UploadConfigurationController {
@POST
public Response setContent(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileMetaData) {
return Response.status(Status.OK).entity("ok").build();
}
}
Po wyborze pliku i wysłaniu żądania do end pointu, dostaję następujący błąd ze strony serwera (wydaje mi się, że nie jest to konieczne, aczkolwiek w razie czego mogę wrzucić pełną treść błędu):
HTTP Status 500 – Internal Server Error
...
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response...
Oczywiście przeszukałem internet w poszukiwaniu rozwiązania. Z tego co się dowiedziałem, to muszę zarejestrować MultiPartFeature. Postępowałem więc zgodnie ze wskazówkami.
W pliku web.xml dodałem:
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
Próbowałem również wykorzystać klasę ResourceConfig aby zarejestrować odpowiedni pakiet:
@ApplicationPath("/webapi")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
packages("org.glassfish.jersey.media.multipart");
register(MultiPartFeature.class);
}
}
Mavenem wcześniej zaciągnąłem odpowiednie liby:
- jersey-media-multipart-2.28.jar
- mimepull-1.9.11.jar
multipart jest zgodne z wersją jersey:
<jersey.version>2.28</jersey.version>
Pomimo tych zmian, wciąż dostaję ten sam błąd ze strony serwera. Pierwszy raz piszę obsługę wysłania pliku na serwer przez RESTa i zdaję sobie sprawę z tego, że czegoś mogę nie wiedzieć lub po prostu robić to nieprawidłowo. Czy jest w stanie ktoś z Was wskazać mi, gdzie tkwi problem lub co robię źle? Będę wdzięczny za wszelką pomoc.
Pozdrawiam.