Maillot Json et Pojo
J'ai passé beaucoup trop d'heures (plus de 10 je dirais) à essayer de comprendre comment obtenir de base json appels (de angularjs) d'ouvrir et de processus sur mon Maillot 2.4.
J'ai tout essayé, résultat sur google et je suis toujours d'obtenir un
415 (Unsupported Media Type)
côté client et un
org.glassfish.jersey.message.interne.MessageBodyProviderNotFoundException: MessageBodyReader pas trouvé le type de support=application/json, type=classe de jersey.webreadability.les contrôleurs.jsonmodels.TextInput, genericType=classe de jersey.webreadability.les contrôleurs.jsonmodels.TextInput.
sur le côté serveur.
Je vais écrire ici chaque fichier que j'ai modifié tout en essayant de résoudre, avec l'espoir que cela aidera quelqu'un pour m'aider.
Pour le moment, je ne me soucie pas vraiment comment ça va fonctionner aussi longtemps que cela fonctionne, je ne comprends celui que je devrais probablement obtenir ce travail avec Jackson ou Gson.
Dépendances (à partir de la POM Fichier):
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json</artifactId>
<version>2.0-m05-1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
de l'Web.xml:
<servlet>
<servlet-name>webReadability</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>jersey.webreadability.controllers</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.algo.server.webservice;org.codehaus.jackson.jaxrs</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
La classe de l'objet:
@XmlRootElement(name = "TextInput")
public class TextInput implements Serializable {
@XmlElement public String url;
@XmlElement public String text;
@XmlElement public String file;
public TextInput() {
}
public TextInput(String url, String text, String file) {
this.url = url;
this.text = text;
this.file = file;
}
@Override
public String toString() {
return "TextInput{" + "url=" + url + ", text=" + text + ", file=" + file +
'}';
}
}
classe principale:
@Path("/analysisController")
public class AnalysisController {
@POST
@Path("/sayHello")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String sayHello(final TextInput text) {
System.out.println("printing out the sent text: " + text);
return "hello " + text.file;
}
}
et js:
var mockDataForThisTest = "json=" + encodeURI(JSON.stringify([
{
url: "http://www.example.com",
text: "txext text tex",
file: $scope.textarea
}
]));
var httpRequest = $http({
method: 'POST',
url: '/rest/analysisController/sayHello/',
data: mockDataForThisTest,
headers: {
'Content-Type': 'application/json'
}
}).success(function(data, status) {
$scope.textarea = data;
console.log(data);
}).error(function(error) {
console.log('error!');
});
C'est tout j'ai actuellement, j'espère que cela aide.
Je vous remercie beaucoup.
OriginalL'auteur Ido_f | 2013-11-14
Vous devez vous connecter pour publier un commentaire.
Je suis en ajoutant ce que ma propre réponse, car je pense que cela va aider quelqu'un avec un horrible copie de travail de Jersey dans le futur. Dans le même temps, la réponse de @Michal Gajdos était grealy utile et vous devez également être en relation avec son texte lorsque vous rencontrez des difficultés dans l'avenir.
Ce qui finalement m'a aidé était une dépendance au qui comprend à peu près chaque chose que vous avez besoin. il suffit de l'ajouter et de lui donner un essai
source: Git
Je suis désolé, je n'ai pas besoin de plus de dépendances
OriginalL'auteur Ido_f
Dépendances
Retirez les deux
jersey-media-json
(ce module n'existe plus en Jersey 2.x) etjersey-json
(qui est seulement pour le Jersey 1.x) et ajouter l'un des modulesjersey-media-moxy
(JAXB) oujersey-media-json-jackson
(POJO). Voir JSON chapitre en Jersey Guide de l'Utilisateur pour plus d'informations sur ces modules.web.xml
Supprimer
com.sun.jersey.config.property.packages
etcom.sun.jersey.api.json.POJOMappingFeature
qui sont en Jersey de 1.x spécifiques et n'ont pas l'usage en Jersey 2.x. Le premier a été remplacé parjersey.config.server.provider.packages
et la seconde a été supprimé (utilisation de POJO JSON<->Objet de cartographie de l'utilisation Jackson modulejersey-media-json-jackson
).Registre caractéristiques
Si vous utilisez
jersey-media-json-jackson
module, vous devez vous inscrire JacksonFeature dans une extension de JAX-RS application ou dansweb.xml
(en utilisant les propriétés de ServerProperties) - voir Jackson chapitre. MOXy (jersey-media-moxy
) est enregistrée automatiquement lorsque le module est sur le chemin de classe.return Response.ok(text).build();
), je reçois unMessageBodyReader not found for media type=application/json
ou MessageBodyWriter dépend si je suis d'envoi ou de réceptionvoir mon edit - Registre des fonctionnalités.
OriginalL'auteur Michal Gajdos
Permettre JacksonFeature dans web.xml. Voir aussi ServerProperties
OriginalL'auteur Ben Asmussen