简体   繁体   English

泽西(Jersey)REST错误,找不到媒体类型= application / json的MessageBodyWriter

[英]Jersey REST error, MessageBodyWriter not found for media type=application/json

I get MessageBodyWriter not found error when I invoke web service call. 调用Web服务调用时出现MessageBodyWriter找不到错误。

I have included genson-1.1.jar in my classpath which I believe is suppose to contain the MessageBodyWriter implementation. 我在我的类路径中包括了genson-1.1.jar ,我相信它应该包含MessageBodyWriter实现。 Yet I get this error. 但是我得到这个错误。

I am using Jersey 2.13. 我正在使用Jersey 2.13。

I have also tried it without registering the "GensonJsonConverter.class" and still gives the same error. 我也尝试过,没有注册“ GensonJsonConverter.class”,但仍然给出相同的错误。

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 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>

Part of the 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

我的lib文件夹

Yep with latest Jersey releases the way it discovers "extensions" has changed. 是的,最新的Jersey发布了它发现“扩展名”的方式已经改变。 Genson will soon be updated to work out of the box with these changes. Genson很快将进行更新,以通过这些更改立即可用。 In the meanwhile to fix it: 在修复它的同时:

1) Add a dependency on metainf-services 1)添加对metainf-services的依赖

OR 要么

2) Register it programmatically. 2)以编程方式注册。

Have a look at the documentation here there is a an explanation in more details with advices on which solution to choose. 看看这里的文档,这里有一个更详细的解释,以及关于选择哪种解决方案的建议。

EDIT As you don't build all the container programmitcally it would be easier for you to use the metainf-services solution. 编辑由于您不是以编程方式构建所有容器,因此使用metainf-services解决方案会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 泽西与Grizzly:找不到媒体类型= application / json的MessageBodyWriter - Jersey with Grizzly: Getting MessageBodyWriter not found for media type=application/json Maven, Jersey, JSON, Tomcat, 找不到媒体类型=application/json 的错误 MessageBodyWriter - Maven, Jersey, JSON, Tomcat, Error MessageBodyWriter not found for media type=application/json 找不到针对媒体类型= application / json的错误MessageBodyWriter - Getting Error MessageBodyWriter not found for media type=application/json 找不到针对媒体类型= application / json的杰克逊网络服务错误MessageBodyWriter - jackson web service error MessageBodyWriter not found for media type=application/json 未找到 Media type=application/json 的 MessageBodyWriter - MessageBodyWriter not found for media type=application/json 找不到媒体类型= application / json的MessageBodyWriter - Getting MessageBodyWriter not found for media type=application/json 找不到媒体类型application / json的MessageBodyWriter - MessageBodyWriter not found for media type application/json 未找到媒体类型 = 应用程序/json 的 MessageBodyWriter - MessageBodyWriter not found for media type=application/json 找不到媒体类型= Application / json,glassfish的MessageBodyWriter - MessageBodyWriter not found for media type=Application/json, glassfish Jersey:找不到媒体类型= application / json的MessageBodyWriter,类型= class org.codehaus.jackson.node.ObjectNode? - Jersey: MessageBodyWriter not found for media type=application/json, type=class org.codehaus.jackson.node.ObjectNode?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM