首页 > 解决方案 > 对 REST 服务进行发布请求时 POJO 到 JSON 的转换

问题描述

我正在使用 JAX-RS API 构建一个休息客户端。我已经创建了服务期望在帖子正文中的 JSON 的 POJO 表示。当我使用以下代码发布帖子时,我收到的响应代码为 500:

Response docPostResponse = inTargetInitializer
        .getDocumentCollectionTarget()
        .request(MediaType.APPLICATION_JSON)
        .headers(buildAuthHeaders())
        .post(Entity.entity(doc, MediaType.APPLICATION_JSON))

我尝试使用以下方法来确保我的 JSON 的 POJO 建模是正确的,并且此方法工作正常,并且我的发布请求正在服务器上创建新资源。

ObjectMapper mapper = new ObjectMapper();
   inTargetInitializer
        .getDocumentCollectionTarget()
        .request(MediaType.APPLICATION_JSON)
        .headers(buildAuthHeaders()).post(Entity.json(mapper.writeValueAsString(doc)));

我正在寻求帮助以了解我的第一种方法有什么问题。

更新:当我尝试从响应中获取实体时,出现以下异常。

Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: Problem with reading the data, class com.imagenow.rest.entities.Document, ContentType: application/json.
    at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:439)
    at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:379)
    at org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:320)
    at org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:310)
    at us.nm.state.hsd.webservices.sbm.ImageNowRestBuilder.getDocFromImageNow(ImageNowRestBuilder.java:232)
    at com.aspen.imgnow.rest.InvokeImageNowStoreClient.main(InvokeImageNowStoreClient.java:16)
Caused by: javax.ws.rs.BadRequestException: HTTP 400 Bad Request
    at org.apache.cxf.jaxrs.utils.SpecExceptions.toBadRequestException(SpecExceptions.java:84)
    at org.apache.cxf.jaxrs.utils.ExceptionUtils.toBadRequestException(ExceptionUtils.java:121)
    at org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleExceptionEnd(AbstractJAXBProvider.java:710)
    at org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleXMLStreamException(AbstractJAXBProvider.java:742)
    at org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:263)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1352)
    at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:370)
    ... 4 more
Caused by: javax.xml.stream.XMLStreamException: java.io.IOException: stream is closed
    at org.codehaus.jettison.AbstractXMLInputFactory.createXMLStreamReader(AbstractXMLInputFactory.java:118)
    at org.apache.cxf.jaxrs.provider.json.utils.JSONUtils.createStreamReader(JSONUtils.java:163)
    at org.apache.cxf.jaxrs.provider.json.JSONProvider.createReader(JSONProvider.java:293)
    at org.apache.cxf.jaxrs.provider.json.JSONProvider.createReader(JSONProvider.java:283)
    at org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:235)
    ... 6 more
Caused by: java.io.IOException: stream is closed
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.ensureOpen(HttpURLConnection.java:3378)
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3403)
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3398)
    at org.codehaus.jettison.AbstractXMLInputFactory.readAll(AbstractXMLInputFactory.java:136)
    at org.codehaus.jettison.AbstractXMLInputFactory.createXMLStreamReader(AbstractXMLInputFactory.java:115)
    ... 10 more

标签: javajsonjacksonjax-rsrest-client

解决方案


推荐阅读