Jaxb Jersey/JaxRs包装任何响应
我正在寻找一种方法来包装我的服务的任何响应 我有一个简单的服务,有很多不同的方法,就像这样Jaxb Jersey/JaxRs包装任何响应,jaxb,jax-ws,jax-rs,jersey-2.0,Jaxb,Jax Ws,Jax Rs,Jersey 2.0,我正在寻找一种方法来包装我的服务的任何响应 我有一个简单的服务,有很多不同的方法,就像这样 @Path(value = "/listSomething/{apiKey:.+}") public List<ObjectA> listSomething(@PathParam(value = "apiKey") String apiKey) 我试着用一些拦截器来实现这一点,但没有成功(除非我添加@xmlseeala注释,我真的不想要,因为我想要一些通用方法)。我的包装器类如下所示: @X
@Path(value = "/listSomething/{apiKey:.+}")
public List<ObjectA> listSomething(@PathParam(value = "apiKey") String apiKey)
我试着用一些拦截器来实现这一点,但没有成功(除非我添加@xmlseeala注释,我真的不想要,因为我想要一些通用方法)。我的包装器类如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
//@XmlSeeAlso(ResponseA.class)
public class ResponseWrapper {
boolean error;
String message;
@XmlAnyElement(lax = true)
Object object;
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
public String getMessage() {
return message;
}
}
我尝试了@XmlElement、@XmlAnyElement的不同组合,但没有成功。我在WriterInterceptor和ContainerResponseFilter中尝试了它
我怎样才能做到这一简单的技巧(如果我不必关心消费者是否需要XML或JSON,那就太酷了,但是如果我必须破解JSON,我可以接受)
我现在觉得有点失落。谢谢你的帮助
我在尝试的方法中经常遇到的错误是未知的
{0} nor any of its super class is known to this context.
我的拦截器或多或少是这样做的
responseContext.setGenericType(Wrapper.class);
responseContext.setType(Wrapper.class);
responseContext.setEntity(wrapperInstance);
在拦截器中,我能想到的最简单的方法是:
Object currentEntity = responseContext.getEntity();
ResponseWrapper wrapper = new ResponseWrapper(currentEntity);
responseContext.setEntity(wrapper);
谢谢,这正是我所做的,但是如上所述,它将抛出一个异常(除非我添加@xmlseealway注释)。我知道这适用于CXF,我不知道为什么它不那么容易与泽西。
Object currentEntity = responseContext.getEntity();
ResponseWrapper wrapper = new ResponseWrapper(currentEntity);
responseContext.setEntity(wrapper);