我正在寻找一种方法来包装我服务的任何回复。
我有一个简单的服务,有很多不同的方法,比如
@Path(value = "/listSomething/{apiKey:.+}")
public List<ObjectA> listSomething(@PathParam(value = "apiKey") String apiKey)
一些返回列表,有些只是一些普通对象。我现在想要实现的是用一些状态信息(例如下面的内容)包围它们周围的任何响应。
response {
staus: "OK",
data: {..the actual response..}
}
我试图通过一些拦截器实现这一点,但我没有成功(除非我添加@XmlSeeAlso注释,我真的不想要的,因为我喜欢一些通用的方法)。我的包装类看起来像:
@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攻击某些东西,那我就可以了。 )?
我此刻感到有点迷茫。谢谢你的帮助。
我尝试的方法通常得到的错误是UNKOWN_CLASS
{0} nor any of its super class is known to this context.
我的拦截器或多或少地做了这个
responseContext.setGenericType(Wrapper.class);
responseContext.setType(Wrapper.class);
responseContext.setEntity(wrapperInstance);
答案 0 :(得分:0)
我在拦截器中想到的最简单的方法是:
Object currentEntity = responseContext.getEntity();
ResponseWrapper wrapper = new ResponseWrapper(currentEntity);
responseContext.setEntity(wrapper);