获取 XML 和 REST 请求的实体
Get XML And Entity of REST Request
我有一个 Java REST 网络服务,其方法如下:
@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 网络服务获取 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();
}
我有一个 Java REST 网络服务,其方法如下:
@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 网络服务获取 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();
}