我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 设置为 String
或 InputStream
@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;
}