gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:23 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com