Jersey-REST-Fehler, MessageBodyWriter nicht gefunden für media-type=application/json
Bekomme ich MessageBodyWriter nicht gefunden " - Fehler, wenn ich die aufrufen web service-Aufruf.
Ich habe genson-1.1.jar
in meinem classpath die, wie ich glaube annehmen zu enthalten, die MessageBodyWriter Umsetzung. Doch ich bekomme diese Fehlermeldung.
Ich bin mit Jersey 2.13.
Ich habe auch versucht es ohne Registrierung der "GensonJsonConverter.class" und noch immer gibt die gleichen Fehler.
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ClientConfig config = new ClientConfig();
WebTarget target = client.target("http://localhost:8080/WebServices/rest/hello");
target.path("Lion King");
target.register(GensonJsonConverter.class);
String response = target.request().accept(MediaType.APPLICATION_JSON).get(String.class);
resp.getWriter().print(response);
}
@Path("hello")
public class Hello {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Book getThisBook(@PathParam("bookName") String bookName){
return new Book(bookName, "Msn", new Date());
}
}
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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>WebServices</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>com.webservices</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.webservices.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Rest Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
Teil der stack-trace:
SEVERE: MessageBodyWriter not found for media type=application/json, type=class com.webservices.entity.Book, genericType=class com.webservices.entity.Book.
Oct 10, 2014 3:19:49 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [myServlet] in context with path [/WebServices] threw exception
javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error
- Posten Sie Ihre web.xml Datei
- web.xml gebucht wird
- Ich benutze jersey 1.18 ich glaube, ich hatte Probleme mit der neueren version von Jersey zu. Vielleicht möchten Sie sich in 1.18
- Sind Sie sicher, dass diese Gläser eingesetzt werden egal auf welchem server du am laufen?
- Ja, siehe mein edit oben. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja mit den neuesten Trikot-releases den Weg, es entdeckt "Erweiterungen" geändert hat. Genson wird bald aktualisiert werden, um die Arbeit out of the box mit diesen änderungen. In der Zwischenzeit, um es zu beheben:
1) Hinzufügen einer Abhängigkeit metainf-services
ODER
2) Registrieren Sie programmgesteuert.
Haben Sie einen Blick auf die Dokumentation ist hier es ist eine Erklärung, in der weitere Informationen mit Tipps, welche Lösung zu wählen.
BEARBEITEN Wie Sie nicht alle container programmitcally es wäre einfacher für Sie, um verwenden Sie die metainf-services-Lösung.