小编典典

如何重用Jersey的JSON / JAXB进行序列化?

json

我有一个使用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中访问它?谢谢!


阅读 283

收藏
2020-07-27

共1个答案

小编典典

泽西岛使用两个不同的框架,具体取决于您使用的是Mapped(),badgerfish()还是natural()表示法。自然通常是人们想要的。我相信,这是使用非常好(且非常快)的独立Jackson
JSON处理器实现的,该处理器来自Object-> JAXB-> JSON。然而,杰克逊还提供了它自己的JAX-RS提供程序来直接使用Object->
JSON。

实际上,他们甚至增加了对JAXB注释的支持。看一下

http://wiki.fasterxml.com/JacksonJAXBAnnotations

我认为这最终就是您要寻找的。杰克逊执行Object <-> JSON处理…杰西只是为您打电话

2020-07-27