SÉVÈRE: MessageBodyWriter pas trouvé le type de support=application/json, type=classe com.jersey.jaxb.Todo, genericType=classe com.jersey.jaxb.Todo
Je suis en train de créer un web RESTful-service et j'ai créé un, mais je suis un
MessageBodyWriter pas trouvé le type de support=application/json erreur
Mon Todo
classe:
package com.jersey.jaxb;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.pojomatic.Pojomatic;
import org.pojomatic.annotations.AutoProperty;
@XmlRootElement
@XmlType(name = "todo")
@XmlAccessorType(XmlAccessType.FIELD)
@AutoProperty
public class Todo {
@XmlElement(name = "summary")
private final String summary;
@XmlElement(name = "description")
private final String description;
public String getSummary() {
return summary;
}
public String getDescription() {
return description;
}
public Todo() {
this(new Builder());
}
public Todo(Builder builder) {
this.summary = builder.summary;
this.description = builder.description;
}
@Override
public boolean equals(Object o) {
return Pojomatic.equals(this, o);
}
@Override
public int hashCode() {
return Pojomatic.hashCode(this);
}
@Override
public String toString() {
return Pojomatic.toString(this);
}
public static class Builder {
private String description;
private String summary;
public Builder summary(String summary) {
this.summary = summary;
return this;
}
public Builder description(String description) {
this.description = description;
return this;
}
public Todo build() {
return new Todo(this);
}
}
}
Et mes Ressources:-
package com.jersey.jaxb;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
@Path("/todo")
public class TodoResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getTodo(){
Todo todo = new Todo.Builder().description("My Todo Object").summary("Created").build();
return Response.status(Status.OK).entity(todo).build();
}
}
Mon web.xml:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<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>
<display-name>MyFirstWebService</display-name>
<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>com.jersey.jaxb</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>
Mes Bibliothèques:
aopalliance-repackaged-2.4.0-b10.jar
asm-debug-all-5.0.2.jar
hk2-api-2.4.0-b10.jar
hk2-locator-2.4.0-b10.jar
hk2-utils-2.4.0-b10.jar
jackson-jaxrs-json-provider-2.2.3.jar
javassist-3.18.1-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.4.0-b10.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.1.jar
jaxb-api-2.2.7.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet.jar
jersey-container-servlet-core.jar
jersey-guava-2.17.jar
jersey-media-jaxb.jar
jersey-server.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
persistence-api-1.0.jar
validation-api-1.1.0.Final.jar
Quand je lance cette application sur serveur Tomcat et exécuter ce :
http://localhost:8080/MyFirstWebService/rest/todo
J'obtiens l'erreur:
SÉVÈRE: MessageBodyWriter pas trouvé le type de support=application/json,
type=classe com.jersey.jaxb.Todo, genericType=classe
com.jersey.jaxb.Todo.
- Cela m'a vraiment aidé à résoudre le problème si vous n'êtes pas à l'aide de maven stackoverflow.com/questions/30423776/...
Vous devez vous connecter pour publier un commentaire.
Vous avez
jackson-jaxrs-json-provider
qui est un début..Mais...
que l'artefact est toujours dépendante Jacskon lui-même, qui comprend toutes ces artefacts
C'est pourquoi nous utilisons Maven[1] (afin de ne pas avoir à vous soucier de ce genre de chose :-). Alors, allez trouver ces.
Puis il suffit de l'ajouter à la web.xml et il devrait fonctionner
1. Maven dependency
Ou utiliser le dessous Jersey "wrapper" pour le dessus de la dépendance. Il enregistre l'Jackson fournisseurs de sorte que nous n'avez pas besoin d'inscrire explicitement comme ci-dessus), et les Jackson exception des contributeurs, et de commencer à partir de la version 2.17, fournit un soutien pour Les Données De L'Entité De Filtrage.
Remarque: Le fait que nous n'avons pas d'enregistrer quoi que ce soit avec le dessus de dépendance, est rendu possible grâce à la Fonctionnalité de découverte automatique de Jersey. Si nous avons pour quelque raison désactiver l'auto-découverte, vous voulez inscrire explicitement la
JacksonFeature
.com.jersey.jaxb
semble erroné, je ne pense pas qu'il existe.La solution pourrait être de faire en sorte que les classes du modèle d'avoir un constructeur sans argument.
Et ajouter cette dépendance à l'égard de votre pom.XML:
J'ai eu le même problème, je l'ai résolu en addind un constructeur vide à la classe
Si vous avez déjà le maillot-médias-moxy dépendance ajoutée à votre pom.xml. Assurez-vous que votre classe d'entité a le constructeur par défaut.
J'ai eu ce problème lorsque j'ai introduit un paramatrized constructeur dans la classe du modèle. Ajouter le constructeur par défaut de nouveau travaillé pour moi.
@Builder
, vous allez avoir besoin d'ajouter ce annotations:@NoArgsConstructor
@AllArgsConstructor.