java - 对 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
解决方案
推荐阅读
- google-app-engine - 映射到安全站点的 Google App Engine 自定义域
- javascript - React - 需要帮助将路径转换为字符串,以便用户在单击 img 时被重定向到 Stripe
- laravel-5 - IFSC 编号无效。该数字应为 11 位数字,格式为 ABCD0123456 条带
- html - 无论我做什么,CSS 都不会加载到烧瓶中,即使直接加载到 HTML 文件中也是如此
- docker - 如何从 Dockerfile 等指令/脚本集创建 AWS AMI?
- php - 如何在 PHP 中将 While 循环 SQL 结果放入表中?
- flutter - 如何在 Dart 中的多个命名构造函数上重用构造函数?
- python - 使用 Python pyodbc 模块,如何从 SQL Server 存储过程中获取输出参数的值?
- java - 解析片段时出错:“${h3}”:无法解析模板或片段
- haskell - 模式匹配在 Haskell 函数中并非详尽无遗