获取发布到 JAXB Web 服务端点的 XML 字符串
Get the XML string posted to JAXB web service endpoint
我已经配置了一个 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
我已经配置了一个 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