java - JAX-RS 将实体作为 JAXB 对象和字符串获取

标签 java jersey jax-rs

我有一个接受 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/

相关文章:

java - Java SE 和 Android 平台的不同正则表达式结果

java - 简单的 GridLayout 缩放动画

google-app-engine - JavaEE默认错误处理程序servlet无法捕获引发的错误

java - 如何让 UriBuilder 构建一个带有解码哈希字符的 URI?

jboss - EclipseLink-Moxy 无法在实例化 JAXB 上下文时加载自定义 DomHandler 类

grails - Grails服务未在jaxrs资源类内自动接线

java - 不循环 for 循环 - Java (android)

Jersey Jackson 和 Codehaus 与 FasterXML

java - 即使内容是 XML,POST contentType 也始终显示 text/plain

java - JTextPane 换行符