休息中的JSON到POJO映射

时间:2016-10-22 11:50:15

标签: java json web-services rest

我是WebServices的新手。我能够实现正常的get和post,但是当我尝试使用MediaType.APPLICATION_JSON实现post方法时。我收到了错误。请告诉我这里有什么问题。

我的资源:

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

_----------------------

我的Web.xml

.......

 package com;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="someName")
public class Pojo {
private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String toString() {
    return "Pojo[name =" + name + "]";
}

}

POJO的

    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        

包含在pom.xml中的jar

ASM,球衣{核心,服务器,客户端,捆绑,JSON,} andcommon-测井公司

请告诉我缺少的东西。

错误:

Controller

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

  4. 安装您喜欢的浏览器插件后,您必须将请求标头Content-Type设置为application/json,以便框架知道您正在发送JSON正文;我想这甚至是你得到status:415)的原因。

答案 1 :(得分:0)

相同的代码运行(相信我,没有任何改变)..在我的系统重新启动后(我猜,因为它也引起了eclipse的重启).. 在此之前我正在进行maven-clean,maven安装,从tomcat配置中删除项目至少11-12次,但总是得到这个错误。

所以我想这对于那些想要在rest api中使用application / json的例子的人来说是有用的(对于发送请求你可以使用像Advanced rest client或postman这样的应用程序,或者你可以创建一个在html页面中形成并通过使用stringify()更改您的表单来提交json对象,然后提交它。我已经使用了ajax用于这个程序)