繁体   English   中英

无法使用JAX-RS(CXF)解组JSON到对象

[英]Cannot unmarshal JSON-to-object with JAX-RS (CXF)

使用最新版本的CXF和其他依赖项,我试图对生成和使用JSON的Web服务进行单元测试。 当方法参数为String时测试有效,但当参数为自定义对象时测试失败。 以下是示例资源:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("testPost")
public Employee getPostTest(Employee data) {
    return data;
}

以下是一个测试案例的摘录

    List<Object> providers = new ArrayList<Object>();
    providers.add(new JacksonJaxbJsonProvider());
    WebClient client = WebClient.create(ENDPOINT_ADDRESS, providers);
    client.accept("application/json");
    client.type("application/json");
    client.path("users/testPost/");
    Employee e = new Employee();
    e.setName("Test");
    Response r = client.post(e);

上面的代码的最后一行抛出以下异常:

2016年12月5日2:46:50 org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem SEVERE:找不到类com.finity.model.Employee的消息正文阅读器,ContentType:application / json 2016年12月5日上午2:46:50 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper做出响应警告:javax.ws.rs.WebApplicationException:HTTP 415 org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils。 java:1315),位于org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:826),位于org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:789)

使用JSONParser尝试读取,但没有成功:

    Employee e = new Employee();
    e.setName("Test");
    Response r = client.post(e);

    MappingJsonFactory factory = new MappingJsonFactory();
    JsonParser parser = factory.createJsonParser((InputStream)r.getEntity());

您需要配置JSON提供程序。 例如杰克逊

 <jaxrs:providers>
   <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
  </jaxrs:providers>

JacksonJaxbJsonProvider (使用JAXB Bean时)

如果还没有,还需要添加Maven依赖项。 org.codehaus.jackson jackson-jaxrs 1.9.0

请参阅CXF JSON支持

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM