如何将 JAXBE 团队编组到响应中



REST服务提供的CXF通常出于通常的原因返回javax.ws.rs.core.Response,以封装封送为 XML 和返回代码的结果实体数据:

@GET
@Path("/getPojo")
@Produces("application/xml")
public Response getPojo() {
    SomePojo resultObj = ...;
    Response result = Response.status(200).entity(resultObj).build();
    return result;
}

这要求SomePojo包含正确的注释:

@XmlRootElement(name = "somePojo")
@XmlAccessorType(XmlAccessType.FIELD)
public class SomePojo implements Serializable {
    ...
}

但是,现在我面临着注释约定对我不起作用的情况,我必须构建自己的JAXBElement。如何在Response中包含定制封送的 JAXBElement,而不是使用 Response.ResponseBuilder.entity(resultObj) ,它依赖于注释配置?我正在封送类似于此处解释的内容,但他只是将封送的 XML 打印到控制台中,我想将其打印到响应中(而不仅仅是HttpResponse)。

您可以使用

自定义封送组器封送 XML,并在Response的实体中将生成的 XML 设置为 StringInputStream

@GET
@Path("/getXML")
@Produces("application/xml")
public Response getXML() {
    String xml = // custom marshall
    Response result = Response.
           status(200).
           entity(xml).
           type("application/xml").
           build();
    return result;
}

最新更新