我有一个具有这种方法的Java REST Web服务:
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
@Path("/send")
public Response sendStuff(Stuff stuff) {
// do magic with stuff
return Response.ok("OK.").build();
}
出于调试目的,我希望将发送的XML附加发送到Stuff
。
现在,我可以手动封送发送对象。然后,我将得到一个完全不同的XML,可能缺少一些元素或属性。
或者我可以自己注入XML并对其进行解析,但这有点钝,而且我可能会错过诸如拦截器之类的Web服务功能。
是否有更好的方法从JAX-RS Web服务中同时获取XML和Java实体?
由于似乎没有正确的方法,我决定采用此方法:
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
@Path("/send")
public Response sendStuff(String xml) {
Stuff stuff;
try (ByteArrayInputStream inputXml = new ByteArrayInputStream(xml.getBytes(Charset.defaultCharset()))) {
final JAXBContext context = JAXBContext.newInstance(Stuff.class);
request = (Stuff) context.createUnmarshaller().unmarshal(inputXml);
} catch (final JAXBException | IOException e) {
return Response.status(400, e.getMessage()).build();
}
// do magic with stuff
return Response.ok("OK.").build();
}