那里有很多示例说明如何使用Spring和Jersey将带注释的POJO(或者将未带注释的POJO封装在JAXBElement中)转换为XML。一切都很好,但是这对我来说也有点神秘。
我想了解更多有关此方法的信息,并且想为Jersey提供我自己选择的JAXB实现。我想为此使用MOXy。
我是否需要“手动”创建(MOXy)JAXBContext供泽西使用,并以某种方式向泽西提供该JAXBContext
。我需要通过JAXBContextFactory来做到这一点吗?
如果以上假设正确,我如何向泽西岛提供JAXBContext
?我尝试为@Provider
设置ContextResolver<JAXBContext>
,但这并没有真正起作用/有所作为。如何告诉泽西岛使用哪个JAXBContext?
春季配置
@Provider
public class JAXBConfiguration implements ContextResolver<JAXBContext> {
private JAXBContext context;
public JAXBConfiguration() throws Exception {
this.context = JAXBContext.newInstance("package.where.model.lives");
}
@Override
public JAXBContext getContext(Class<?> objectType) {
return context;
}
}
泽西岛资源
@Component
@Path("/test")
public class LabelsResource {
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getLabels(@QueryParam("labelIds") String labelIds) {
try {
DefaultLabel entity = new DefaultLabel();
entity.setName("name");
entity.setCode("code");
// Works
//return Response.ok(new JAXBElement<DefaultLabel>(new QName("label"), DefaultLabel.class, entity)).build();
// Does not work
return Response.ok(entity).build();
} catch (Exception e) {
return Response.serverError().entity(e.getMessage()).build();
}
}