簡體   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