我有一个使用Jersey实现的JAX-RS REST服务。JAX-RS / Jersey的很酷的功能之一是,只需添加一些Java批注,就可以将POJO轻松转换为REST服务…包括使用JAXB批注将POJO转换为JSON的简单方法。
现在,我希望能够将这个酷炫的JSON修饰功能用于非REST用途-我很希望能够将其中一些对象序列化为JSON文本到磁盘。这是我要序列化的示例JAXB对象:
@XmlRootElement(name = "user") public class UserInfoImpl implements UserInfo { public UserInfoImpl() {} public UserInfoImpl(String user, String details) { this.user = user; this.details = details; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } private String user; private String details; }
Jersey可以将其中之一转换为json,而无需其他信息。我想知道Jersey是否已针对我的需求在API中公开了此功能?到目前为止我还没有运气…
谢谢!
更新2009-07-09 :我了解到可以使用Providers对象 几乎 完全执行我想要的操作:
@Context Providers ps; MessageBodyWriter uw = ps.getMessageBodyWriter(UserInfoImpl.class, UserInfoImpl.class, new Annotation[0], MediaType.APPLICATION_JSON_TYPE); uw.writeTo(....)
…这会将对象作为json写入任何输出流,这对我来说是完美的,但是我只能使用@Component对象中的@Context来访问Providers对象。有谁知道如何从常规的,未注释的POJO中访问它?谢谢!
泽西岛使用两个不同的框架,具体取决于您使用的是Mapped(),badgerfish()还是natural()表示法。自然通常是人们想要的。我相信,这是使用非常好(且非常快)的独立Jackson JSON处理器实现的,该处理器来自Object-> JAXB-> JSON。然而,杰克逊还提供了它自己的JAX-RS提供程序来直接使用Object-> JSON。
实际上,他们甚至增加了对JAXB注释的支持。看一下
http://wiki.fasterxml.com/JacksonJAXBAnnotations
我认为这最终就是您要寻找的。杰克逊执行Object <-> JSON处理…杰西只是为您打电话