Java Rest中的JSON到POJO映射

Java Rest中的JSON到POJO映射,java,json,web-services,rest,Java,Json,Web Services,Rest,我不熟悉网络服务。我能够实现正常的get和post,但当我试图用MediaType.APPLICATION_JSON实现post方法时。我有错误。请让我知道这里出了什么问题 我的资源: _---------------------- My Web.xml <servlet> <servlet-name>Bakchodi</servlet-name> <servlet-Class> com

我不熟悉网络服务。我能够实现正常的get和post,但当我试图用MediaType.APPLICATION_JSON实现post方法时。我有错误。请让我知道这里出了什么问题

我的资源: _----------------------

My Web.xml

     <servlet>
     <servlet-name>Bakchodi</servlet-name>
     <servlet-Class>          
     com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
     <init-param>
     <param-name>com.sun.jersey.config.property.packages</param-name>
     <param-value>com</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>Bakchodi</servlet-name>
     <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>`

pom.xml中包含的jar asm、jersey{core、服务器、客户端、bundle、json、}和通用日志

请告诉我遗漏了什么

错误:

    status:415
    server console:SEVERE: A message body reader for Java class com.Pojo, and Java type class com.Pojo, and MIME media type application/json was not found.
    The registered message body readers compatible with the MIME media type are:
    application/json ->
      com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
      com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
      com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
    */* ->
      com.sun.jersey.core.impl.provider.entity.FormProvider
      com.sun.jersey.core.impl.provider.entity.StringProvider
      com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
      com.sun.jersey.core.impl.provider.entity.FileProvider
      com.sun.jersey.core.impl.provider.entity.InputStreamProvider
      com.sun.jersey.core.impl.provider.entity.DataSourceProvider                                                           com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
      com.sun.jersey.core.impl.provider.entity.ReaderProvider
      com.sun.jersey.core.impl.provider.entity.DocumentProvider
              com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
              com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
      com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
              com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
              com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
      com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
      com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
      com.sun.jersey.core.impl.provider.entity.EntityHolderReader
              com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
              com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General        

您的帖子中缺少一些信息,例如URI结构、您正在使用的Servlet规范的版本、调用资源的方式等等

无论如何,您可以检查以下内容:

  • 您正在使用注释
    @POST()
    ,这对我来说很奇怪,因此您最好删除括号:

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_HTML)
    public String x2(Pojo p) {
        return "HI HI post jason" + p.getName();
    }
    
  • 正如您所指定的,您需要一个POST请求,这意味着您必须在请求正文中发送JSON文本,例如:

    { "name": "RAHUL" }
    
  • 除非您使用HTML表单,否则普通浏览器不提供发送POST请求的方式(至少我不知道);所以你需要一些浏览器插件来发送JSON作为请求体;您可以使用Postman for Chrome或RESTClient for Firefox,…,或者使用诸如ApacheWink之类的REST客户端框架

  • 安装您喜爱的浏览器插件后,您必须将请求头
    内容类型
    设置为
    应用程序/json
    ,以便框架知道您正在发送json正文;我认为这甚至是您获得
    状态:415
    )的原因

  • 同样的代码运行(相信我,没有任何更改)…在我的系统重新启动后(我猜,因为它也导致了eclipse的重新启动)。。 在此之前,我做了maven清理,maven安装,从tomcat配置中删除项目至少11-12次,但总是出现这个错误


    因此,我想这将适用于希望在rest api中使用application/json示例的人……(发送请求时,您可以使用高级rest客户端或postman等应用程序,或者您可以在html页面中创建表单,并通过使用stringify()更改表单提交json对象。我在这篇文章中使用了ajax)

    可能重复的@Eomm:请告诉我解决方案。因为我可以看到,我的问题没有在那里提到……我有那里所有的配置人员建议的。请告诉我我错过了什么…提前谢谢谢谢你的建议。。。在我的系统重新启动后(我猜,因为它也导致了eclipse的重新启动),如何运行相同的代码(相信我,没有任何更改)…无论如何,再次感谢。
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_HTML)
    public String x2(Pojo p) {
        return "HI HI post jason" + p.getName();
    }
    
    { "name": "RAHUL" }