2016-08-08 50 views
1

Ich habe einige Probleme mit der Verwendung von FormDataMultiPart.Ein Nachrichtentextleser für FormDataMultiPart wurde nicht gefunden

Aus irgendeinem Grund sieht es so aus, als ob die Konfiguration für MultiPartFeature nicht aufgerufen wird, obwohl ich es in meine web.xml geschrieben habe, hier ist mein Code unten.

web.xml

<servlet> 
    <servlet-name>REST</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.rest</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

meine Ruhe Methode

@POST 
@Path("https://stackoverflow.com/users/{userId}/images") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadImage(@HeaderParam("securityToken") String securityToken, @PathParam("userId") Integer userId, 
          FormDataMultiPart form) {} 

und die Log-Nachricht

09-Aug-2016 09:41:42.718 SEVERE [http-nio-8080-exec-10] com.sun.jersey.spi.container.ContainerRequest.getEntity A message body reader for Java class org.glassfish.jersey.media.multipart.FormDataMultiPart, and Java type class org.glassfish.jersey.media.multipart.FormDataMultiPart, and MIME media type multipart/form-data; boundary=myRandomBoundary12345 was not found. 
The registered message body readers compatible with the MIME media type are: 
*/* -> 
    com.sun.jersey.core.impl.provider.entity.FormProvider 
    com.sun.jersey.core.impl.provider.entity.StringProvider 
    com.sun.jersey.core.impl.provider.entity.ByteArrayProvider 
    com.sun.jersey.core.impl.provider.entity.FileProvider 
    com.sun.jersey.core.impl.provider.entity.InputStreamProvider 
    com.sun.jersey.core.impl.provider.entity.DataSourceProvider 
    com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.ReaderProvider 
    com.sun.jersey.core.impl.provider.entity.DocumentProvider 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader 
    com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General 
    com.sun.jersey.core.impl.provider.entity.EntityHolderReader 
    com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General 
    com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General 
+0

Sie mischen Jersey 1.x und 2.x. Jersey Welche Version möchten Sie verwenden? –

+0

Siehe meine aktualisierte Antwort. –

Antwort

1

Mit Jersey 2.x und 3.x Servlet Container, Sie don‘ t benötige einen web.xml Deployment Deskriptor. Für weitere Details, überprüfen Sie die Jersey documentation about deployment.


könnten Sie verwenden die @FormDataParam Annotation die benannte Körperteil (e) eines multipart/form-data Anforderungsentität Körper auf eine Ressource Methodenparameter zu binden, wie im folgenden Beispiel:

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response upload(@FormDataParam("file") InputStream inputStream, 
         @FormDataParam("file") FormDataContentDisposition fileMetaData) { 
    ... 
} 

nutzen zu können, Multipart-Funktionen müssen Sie das -Modul zu Ihrer pom.xml Datei hinzufügen:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-multipart</artifactId> 
    <version>2.23.1</version> 
</dependency> 

Wenn Sie Maven nicht verwenden, stellen Sie sicher, dass alle erforderlichen Abhängigkeiten (siehe jersey-media-multipart) für den Klassenpfad vorhanden sind. Und vergessen Sie nicht, die MultiPartFeature in Ihrer Application/ResourceConfig Unterklasse zu registrieren.

Für weitere Details, überprüfen Sie die Jersey documentation about multipart requests.

+0

in meiner pom.xml Ich habe Jersey-Bundle-Version 1.19 also sollte ich multipart 1.19.1 verwenden? – beerye

+0

@beerye Ja. Ich frage mich nur, ob Sie auf Jersey 2.x aktualisieren können. –

+0

Ja, ich kann auch .. Was muss ich für Version 2.x ändern? – beerye

0

Ich machte dies zur Arbeit. In meinem Fall benutze ich Jersey-Server 1.19 und Jersey-Multipart 1.19 Gläser. Selbst dann warf es den gleichen Fehler.

Nach dem Hinzufügen mimepull1.9.3 Server, bekam es funktionierte :-)