java - 获取发布到 JAXB Web 服务端点的 XML 字符串

标签 java json xml jaxb jax-ws

我已经配置了一个 Web 服务端点,如下所示。

@POST
@Consumes({MediaType.APPLICATION_XML})
@Produces({MediaType.TEXT_PLAIN})
@Path("/post")
public String postPerson(Person pers) throws Exception{
    String xml_string_posted="?";
    System.out.println(<xml_string_posted>);
    JAXBContext jc = JAXBContext.newInstance(Person.class);
    XMLInputFactory xif = XMLInputFactory.newFactory();
    XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource());

    }

我的问题很简单。每当有 POST 请求提交到此端点(如下所示)时,我如何将下面发布的整个 XML 字符串放入变量中。

POST /JX-1.0/service/person/post HTTP/1.1
Host: 
Content-Type: application/xml
X-Requested-With: XMLHttpRequest

<?xml version="1.0"?>
<a>
<b>&name;</b>
</a>

最佳答案

由于 HttpServletRequest#getInputStream() 只能使用一次,因此如果您想获取原始请求正文,则必须更新方法的签名。

例如,您可以向您的方法添加一个字符串参数。有效负载将自动分配给该变量。

@POST
@Consumes({MediaType.APPLICATION_XML})
@Produces({MediaType.TEXT_PLAIN})
@Path("/post")
public String postPerson(String bodyRequest) throws Exception{
    // your code...
}

作为替代方案,您可以使用 HttpServletRequest,如下所示:

@POST
@Consumes({MediaType.APPLICATION_XML})
@Produces({MediaType.TEXT_PLAIN})
@Path("/post")
public String postPerson(@Context HttpServletRequest request) throws Exception{
    ServletInputStream inputStream = request.getInputStream();
    System.out.println(inputStream.isFinished());
    byte[] buffer = new byte[250];
    int read = inputStream.read(buffer);
    System.out.println(new String(buffer, 0, read));
    // ...
}

如果您需要原始签名,可以查看这个问题:How to read request.getInputStream() multiple times

关于java - 获取发布到 JAXB Web 服务端点的 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769631/

相关文章:

java - 如何用 HashMap 替换 SQL 查询字符串

io - 为什么java不能读取rt.jar?

java - 如何在 java web 客户端中实现基本操作系统风格的控制台?

javascript - 通过ajax提交表单并通过JSON从servlet回复,无需刷新页面

java - XPATH 仅选择第一级子级

java - 如何在java中获取最新的一组日期变量

json - 如何将大型 JSON 数组文件加载到 Azure Data Lake Analytics (ADLA) 中

json - 如何使用 Postgres 在根级别更新多个 json 字段?

c# - 是否可以使用属性指定 XML 节点名称和深度

java - Webview + 底部的 admob + LinearLayout