2016-08-08 2 views
1

Je rencontre des problèmes avec l'utilisation de FormDataMultiPart.Un lecteur de corps de message pour FormDataMultiPart n'a pas été trouvé

Pour une raison quelconque, il semble que la configuration de MultiPartFeature ne soit pas appelée, même si je l'ai placée dans mon fichier web.xml, voici mon code ci-dessous.

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> 

Ma méthode reste

@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) {} 

et le message du journal

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

Vous confondez 1.x Jersey et Jersey 2.x. Quelle version voulez-vous utiliser? –

+0

Voir ma réponse mise à jour. –

Répondre

1

Avec Jersey 2.x et 3.x un conteneur Servlet, vous n » t besoin d'un descripteur de déploiement web.xml. Pour plus de détails, consultez le Jersey documentation about deployment.


Vous pouvez utiliser l'annotation @FormDataParam pour lier la partie du corps nommé (s) d'un corps d'entité de demande multipart/form-data à un paramètre de méthode de ressource, comme illustré ci-dessous:

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

Pour utiliser fonctions multiparties dont vous avez besoin pour ajouter le module jersey-media-multipart à votre fichier pom.xml:

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

Si vous n'utilisez pas Maven, assurez-vous d'avoir toutes les dépendances nécessaires (voir jersey-media-multipart) sur le chemin de classe. Et n'oubliez pas d'enregistrer le MultiPartFeature dans votre sous-classe Application/ResourceConfig. Pour plus de détails, consultez le code documentation about multipart requests de Jersey.

+0

dans mon pom.xml j'ai jersey-bundle version 1.19 donc je devrais utiliser multipart 1.19.1? – beerye

+0

@beerye Oui. Je me demande simplement si vous pouvez passer à Jersey 2.x. –

+0

Oui, je peux aussi bien .. qu'est-ce que je dois changer pour la version 2.x? – beerye

0

Je l'ai fait fonctionner. Dans mon cas, j'utilise Jersey server 1.19 et jersey multipart 1.19 jars. Même alors, il jetait la même erreur.

Après avoir ajouté le serveur mimepull1.9.3, il a obtenu travaillé :-)