Maillot 415 Type De Support Non Pris En Charge
J'essaie depuis des heures pour corriger l'erreur http 415 Unsupported Media Type
mais il est toujours à l'affiche médias non pris en charge page.
Je suis ajoutant des en-têtes application/json
en Facteur.
Voici mon Code Java
package lostLove;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.JSONObject;
@Path("/Story")
public class Story {
@POST
@Consumes({"application/json"})
@Produces(MediaType.APPLICATION_JSON)
// @Consumes(MediaType.APPLICATION_JSON)
// @Path("/Story")
public JSONObject sayJsonTextHello(JSONObject inputJsonObj) throws Exception {
String input = (String) inputJsonObj.get("input");
String output = "The input you sent is :" + input;
JSONObject outputJsonObj = new JSONObject();
outputJsonObj.put("output", output);
return outputJsonObj;
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "hello";
}
}
voici mon web.xml
fichier
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>LostLove</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>lostLove</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
OriginalL'auteur cham3333 | 2015-06-07
Vous devez vous connecter pour publier un commentaire.
Comment nos objets sont sérialisés et désérialisé vers et à partir du flux de la réponse et la demande de cours d'eau est par le biais de
MessageBodyWriter
s etMessageBodyReader
s.Ce qui va se passe est que, une recherche sera effectuée à partir du registre des fournisseurs, pour celui qui peut gérer
JSONObject
et le type de supportapplication/json
. Si on ne peut pas être trouvé, Maillot peut pas traiter la demande et enverra un 415 non pris en charge Type de Média. Vous devez normalement avoir une exception enregistré aussi sur le côté serveur. Vous ne savez pas si vous avez eu la chance de voir le journal encore.Jersey n'ont pas de standard de lecteur/graveur pour le
org.json
objets. Vous devez rechercher le web pour une mise en œuvre ou écrivez-en un vous-même, puis de l'enregistrer. Vous pouvez en savoir plus sur la façon de mettre en œuvre ici.Alternativement, vous pouvez accepter une Chaîne de caractères et retourne une Chaîne. Juste à construire la
JSONObject
avec le paramètre de chaîne, et d'appelerJSONObject.toString()
lors de leur retour.Ma suggestion serait d'utiliser une liaison de Données-cadre comme Jackson, qui peut gérer la sérialisation et la désérialisation et de sortir les objets de modèle (simple Pojo). Par exemple, vous pouvez avoir une classe comme
Vous pourriez avoir la
Model
comme un paramètre d'une méthodeDe même pour le
ReturnType
. Il suffit de créer un POJO pour le type que vous voulez retourner. Le JSON les propriétés sont basées sur la JavaBean noms de propriété (getters/setters suivant la convention de nommage ci-dessus).Pour obtenir cette aide, vous pouvez ajouter ce Maven dependency:
Ou si vous n'êtes pas à l'aide de Maven, vous pouvez voir ce post, pour les pots, vous pouvez télécharger de façon indépendante.
Certaines ressources:
Je n'ai pas dit d'utiliser JSONObject avec Jackson. Si vous êtes à l'aide de Jackson, à l'aide de simples POJO comme mon Modèle de classe. Le fonctionnement interne de JSONObject ne sont pas dans le JavaBean style, ce qui est nécessaire
Voir le Jackson Tutoriel pour fr exemple de la façon dont votre Pojo.
OriginalL'auteur Paul Samsotha
En raison de son problème suivant:
JAX-RS ne supporte pas par défaut Jackson cartographie de conversion. Donc, si vous avez de la requête ajax comme ci-dessous(la Poste):
et JAX-RS contrôleur de côté, vous devez faire comme ci-dessous:
Ici s'il vous plaît assurez-vous que sur le paramètre. le service est d'accepter json comme une Chaîne de caractères pas le POJO.
Ça sera sûrement travail. Merci!
Il pourrait être le problème des anciennes versions de JAX-RS. Je suis à l'aide de jersey 1.8.3 et la spécification dit ne pas convertir en json(en provenance de l'Ajax post) pour POJO automatiquement.
ce n'est pas précis: En Jersey 1.x vous pouvez activer le
JSONConfiguration.FEATURE_POJO_MAPPING
et Jackson sera utilisé pour convertir en JSON pour les Objets Java et à l'arrière.Merci pour l'information. Mais Si nous n'avons pas l'activer puis Sa ne fait pas de conversion. Donc j'ai répondu ici parce que peut-être quelqu'un d'autre devra faire face au même problème. Grâce Cassio!
"j'ai répondu ici parce que peut-être quelqu'un d'autre devra faire face au même problème." L'OP est à l'aide de Jersey 2.x à la place de Jersey 1.x. Voir
org.glassfish.jersey
dans leweb.xml
.OriginalL'auteur Aman Goel
J'ai vu le même problème lors de l'utilisation de Jersey avec HTTP/2, si le client envoyer des requête HTTP/1.1,p. ex. à l'aide de Jersey client, puis il fonctionne très bien.
Si je passe à la Jetée HTTP2 Client d'envoyer le même contenu, je reçois 415.
Le temp solution que j'utilise est l'alternative décrite par Paul Samsotha, c'est à dire "accepter une Chaîne de caractères et retourne une Chaîne", puis manuellement désérialiser la Chaîne de POJO.
OriginalL'auteur Ross Z