2016-01-27 3 views
1

J'ai vu quelques solutions à ce problème mais il semble que les suivre ne résout pas mon problème. Je retourne un tableau simple de chaîne et quand je reviens, je reçois cette erreur:MessageBodyWriter non trouvé pour media type = application/json même si Jackson est inclus

Severe: MessageBodyWriter not found for media type=application/json, type=class [Ljava.lang.String;, genericType=class [Ljava.lang.String;. 

La méthode est très simple (obtient une liste de fichiers)

@GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public String[] getSegments(@PathParam("userId") String userId, 
      @PathParam("deviceId") String deviceId) { 
     System.out.println("in get, userId passed: " + userId); 
     String[] segments = storage.getSegments(userId, deviceId); 
     return segments; 
    } 

Mon pom.xml semble pour avoir toutes les choses recommandées dans d'autres postes:

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>RoverServerLib</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.jaxrs</groupId> 
     <artifactId>jackson-jaxrs-json-provider</artifactId> 
     <version>2.7.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.ext</groupId> 
     <artifactId>jersey-servlet-portability</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.connectors</groupId> 
     <artifactId>jersey-apache-connector</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
     <version>${jersey.version}</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
</dependencies> 

Répondre

1

Le problème est avec MOXy. Il ne sait pas comment gérer les tableaux de chaînes. Lorsque vous avez MOXy sur le classpath, il est utilisé par défaut. Pour utiliser Jackson (jersey-media-json-jackson). Vous avez juste besoin d'enregistrer le JacksonFeature. Cela désactivera MOXy. Notez que même en supprimant MOXy de votre projet, cela n'aura aucun effet, comme le fait Glassfish, donc vous devez vous assurer d'enregistrer le JacksonFeature. Vous devriez également vous débarrasser de jackson-jaxrs-json-provider. jersey-media-json-jackson l'attire déjà (mais une version différente).

Une autre chose est que Glassfish a déjà sa propre version de Jersey et ses amis. Si vous ne marquez pas toutes vos dépendances liées à Jersey comme <scope>provided</scope>, il est possible que vous ayez des conflits de version. Donc, vous devriez tous les faire provided. Glassfish 4.1 utilise Jersey 2.10.4. Si vous avez besoin de nouvelles fonctionnalités de la version, je recommanderais updating Jersey in Glashfish.

+0

il pourrait être plus facile pour moi de me débarrasser de la rangée de cordes que de singe avec les différentes configs. Merci! – mikebz

+0

dans le processus, j'ai découvert que ma version de GlassFish est cassée. Oh joie: https://java.net/jira/browse/GLASSFISH-21440 :) :) – mikebz