MessageBodyWriter no encontrado para media type = application / json
Me enfrento a problemas al consumir servicios JAX-RS como JSON.
A continuación he añadido mi código.
Esta es mi clase de servicio:
//Sets the path to base URL + /hello
@Path("/hello")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class Hello {
@GET
@Produces("application/json")
public Student getStudent() {
Student s = new Student();
s.first_name = "Test First Name !!!";
s.last_name = "Test Last Name!!!";
return s;
}
Student
clase que estoy tratando de obtener del servicio:
@XmlRootElement
public class Student implements Serializable {
public String first_name;
public String last_name;
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public Student()
{
first_name = "Fahad";
last_name = "Mullaji";
}
}
Web XML en el lado del servicio.
<?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>com.vogella.jersey.first</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.first</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</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>
No se como solucionar este problema. Estoy usando SOAP UI para probar la respuesta JSON, pero supongo que no debería importar.
Muchos lugares he leído que tengo que añadir el código a continuación. Pero no se donde. No estoy usando Maven por construir.
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
El servidor está buscando la función para analizar Student
el objeto a JSON, pero no es capaz de encontrar la función o el archivo jar para él.
He añadido tarro de Genson, Moxy, RESTEasy y Jackson, pero creo que ese es el problema.
Creo que me estoy perdiendo el mapeo en alguna parte.
9 answers
Pude arreglarlo instalando jersey-media-json-jackson
Añade la dependencia a pom.xml
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<scope>runtime</scope>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-19 05:17:20
Tienes que crear un constructor vacío porque JAX-RS inicializa las clases... Su constructor no debe tener argumentos:
@XmlRootElement
public class Student implements Serializable {
public String first_name;
public String last_name;
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public Student()
{
first_name = "Fahad";
last_name = "Mullaji";
}
public Student()
{
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-13 17:00:20
Estaba en la misma situación donde
- Yo estaba no usando Maven o Hormiga,
- Terminé este tutorial de Vogella en Jersey ,
- y estaba recibiendo el error MessageBodyWriter
al intentar usar @Produces(MediaType.APPLICATION_JSON)
.
Esta respuesta de @peeskillet resuelve el problema - tienes que usar el Jackson *.archivos jar que están disponibles desde la página de descarga de FasterXML Jackson. Necesitará los archivos core
así como los archivos jaxrs
.
Los agregué a mi carpeta WebContent/WEB-INF/lib
donde tengo mi Camiseta *.jar archivos por el tutorial anterior, e hizo el pequeño cambio a la web.archivo xml a continuación (de nuevo, como originalmente compartido por @peeskillet):
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
your.other.package.here, com.fasterxml.jackson.jaxrs.json
</param-value>
La parte importante es com.fasterxml.jackson.jaxrs.json
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:27
Descomentando el siguiente código ayudó
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
Que estaba presente en pom.xml en mi proyecto basado en maven resolvió este error para mí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-30 05:04:01
A continuación debe estar en su pom.xml por encima de otras dependencias jersy / jackson. En mi caso, como a continuación jersy-client dep-cy y tengo MessageBodyWriter no encontrado para media type=application/json.
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-13 08:58:05
Bueno, no pude hacer que el proyecto web anterior funcionara. Pero seguí investigando sobre JAX-RS y me encontré con el tutorial de Stormpath. Creo que quienquiera que esté tratando de aprender cómo REST, JSON y Jersey trabajan juntos debería ver esto.
Por favor, vea los enlaces a continuación para su presentación y muestra del proyecto REST en GitHub .
Https://www.youtube.com/watch?v=sVvL12BnIyQ
Https://github.com/stormpath/todos-jersey
Ahora puedo comparar el proyecto anterior y ver lo que todas las cosas que hice mal.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-28 22:00:55
Creo que debe intentar convertir los datos a formato json. Se puede hacer usando gson lib. Prueba algo como abajo.
No lo sé es una mejor solución o no, pero podría hacerlo esto way.It me funcionó
Ejemplo: '
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response info(@HeaderParam("Accept") String accept) {
Info information = new Info();
information.setInfo("Calc Application Info");
System.out.println(accept);
if (!accept.equals(MediaType.APPLICATION_JSON)) {
return Response.status(Status.ACCEPTED).entity(information).build();
} else {
Gson jsonConverter = new GsonBuilder().create();
return Response.status(Status.ACCEPTED).entity(jsonConverter.toJson(information)).build();
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-08 05:49:50
Me enfrenté a un problema similar porque el constructor de este objeto estaba usando parámetros
Antes
public MakeMoneyAndGetFitWhileYouSleep(@NotNull UserDetails turkey) {...}
Después de
public MakeMoneyAndGetFitWhileYouSleep(){}
public static MakeMoneyAndGetFitWhileYouSleep getInstance (@NotNull UserDetails turkey) {...}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-13 01:01:44
Para superar este problema intente lo siguiente. Funcionó para mí.
Agregue la siguiente dependencia en el pom .xml
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25</version>
</dependency>
Y asegúrese de que La clase de modelo contiene ningún constructor arg
public Student()
{
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-26 00:23:34