我有一个接受 JAXB 对象作为请求实体的 JAX-RS Web 服务(使用 Jersey )。当我们遇到错误时,我们想要记录发送给我们的原始 xml 字符串。目前,我只是重新编码 JAXB 对象,但由于我们在这些类中有多个 java 枚举,原始 xml 字符串中未正确拼写的枚举值将丢失,这对于我们的目的来说是 Not Acceptable 。
有谁知道将请求实体同时作为字符串和 JABX 对象获取的方法吗?我宁愿不编写自定义 MessageBodyReader,如果可能的话,我宁愿不尝试获取 JAXB 的 MessageBodyReader。您也可以自由使用特定 Jersey 的类(class)。我们使用的是 1.0.x 版本。
最佳答案
事实证明,使用 JAX-RS API 做到这一点并不难。这是我所做的:
@Path("/transactions")
public class TestResource<X> {
private Class<X> jaxbClass;
@POST
@Path("/{transaction-id}")
@Consumes("application/xml")
public Response processPost(@Context Providers providers, @Context HttpHeaders httpHeaders, @PathParam("transaction-id") final long transactionId,
final String xmlString) throws WebApplicationException, IOException {
MessageBodyReader<X> reader = providers.getMessageBodyReader(jaxbClass, null, null, MediaType.APPLICATION_XML_TYPE);
InputStream entityStream = new ByteArrayInputStream(xmlString.getBytes());
final X xmlObject = reader.readFrom(jaxbClass, null, null, MediaType.APPLICATION_XML_TYPE, httpHeaders.getRequestHeaders(), entityStream);
//insert logic here
return Response.ok().build();
}
}
这将在几行代码中以字符串和 JAXB 对象的形式为您提供 xml。
关于java - JAX-RS 将实体作为 JAXB 对象和字符串获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828526/