如何将POST中的json转换为javaBean

时间:2017-04-27 10:09:19

标签: java json

这是我的提供者:

class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"

这是我的javaBean

import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonRootName;

@JsonRootName("issue")
public class TestBean {

    @JsonProperty("project_id")
    private Integer projectId;

    @JsonProperty("subject")
    private String subject;

    public Integer getProjectId() {
        return projectId;
    }

    public void setProjectId(Integer projectId) {
        this.projectId = projectId;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

}

这是我的服务

 @WebService
    public class IssueRestfulApi {

          @POST
          @Path("/create")
          @Consumes(value = {MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
          public void createIssue(TestBean bean) {
                System.out.println(bean.getSubject());
                System.out.println("get create request");
          }
        }

然后我发送这样的帖子请求:

{"issue": {
    "project_id": 1,
    "subject": "Example"
  }
}

最后我得到了这个例外:

Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "issue" (Class com.rakuten.tranp.api.bean.TestBean), not marked as ignorable
 at [Source: org.apache.cxf.transport.http.AbstractHTTPDestination$1@783478b0; line: 1, column: 12] (through reference chain: com.rakuten.tranp.api.bean.TestBean["issue"])
    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
    at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
    at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659)
    at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365)
    at org.codehaus.jackson.map.deser.BeanDeserializer._handleUnknown(BeanDeserializer.java:725)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:703)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315)
    at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1311)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1262)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:801)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:764)
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212)
    ... 28 more

如何解决这个问题,请帮帮我, 非常感谢你, regurd。

2 个答案:

答案 0 :(得分:0)

application.property文件中添加此属性,然后重试:

spring.jackson.deserialization.UNWRAP_ROOT_VALUE=true

答案 1 :(得分:0)

错误堆栈跟踪非常简单明了,可以识别问题:

  

无法识别的字段"问题" (com.rakuten.tranp.api.bean.TestBean)

这意味着您正在尝试发布带有属性ìssue的JSON,这是我们在您的JSON中可以看到的,它在Java Bean中不存在,因此它会导致此异常,因为财产未被识别且无法映射。

<强>解决方案:

因此,您需要更改JSON以仅包含issue对象的内部属性:

{
    "projectId": 1,
    "subject": "Example"
}

修改

如果您无法更改JSON,那么您需要有两个POJO类:

  1. 第一个Issue,其中包含两个属性projectIdsubject 正如你在TestBean课程中所写的那样。
  2. 其次是TestBean,它只接受类型的对象 Issue