这是我的提供者:
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。
答案 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类:
Issue
,其中包含两个属性projectId
和subject
正如你在TestBean
课程中所写的那样。TestBean
,它只接受类型的对象
Issue
。