当前位置: 首页 > 面试题库 >

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

鲜于璞瑜
2023-03-14
问题内容

我有一个使用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处理…杰西只是为您打电话



 类似资料:
  • 问题内容: 我有一个定义以下类型的架构: 这样就创建了一个对象,如下所示: 现在,我尝试将另一个生成的JAXB对象添加到该有效负载中,如下所示: 但是我遇到了一个可怕的异常,看起来它将永远无法工作,所以我决定先将有效负载对象序列化为XML,然后将其作为字符串添加到有效负载中。 而且这会爆炸,并说“ java.lang.String”不包含@XmlRootElement。 那么xs:any的使用将如

  • 问题内容: 和服务: 我的web.xml: 如果我将MediaType.APPLICATION_XML设置为Produces注释,则所有这些工作都可以进行。但是对于JSON,我得到以下异常: 严重:映射的响应异常:500(内部服务器错误)javax.ws.rs.WebApplicationException:com.sun.jersey.api.MessageException:Java类java

  • 问题内容: 我有一个像这样的简单容器类的结构(在伪红宝石中): 有没有简单的方法可以在Ruby中将其反序列化为JSON?还是应该像本例一样为每个类制作嵌套的序列化方法? 编辑: 在我的特定情况下,我想将一些JSON数据发布到运行Ruby的服务器上,该服务器将提取数据并采取相应的措施。 JSON的发送者不一定是Ruby进程,而可能是其他系统的后端。(尽管在我的测试工具中是Ruby)。 因此,我不需要

  • 问题内容: 我有一个Python ,其中包含带有和方法的对象,以确保集合中没有重复项。 我需要对该结果进行json编码,但是即使将一个空值传递给该方法也会引发。 我知道我可以为具有自定义方法的类创建扩展,但是我什至不知道从哪里开始进行转换。我是否应该使用默认方法中的值创建字典,然后返回该方法的编码?理想情况下,我想使默认方法能够处理原始编码器阻塞的所有数据类型(我将Mongo用作数据源,所以日期似

  • 问题内容: 我正在研究的项目使用JAXB参考实现,即类来自软件包。 我有一堂课: 我想使用JAXB编组器来获取对象的JSON表示形式: 封送处理的数据为XML格式,而不是JSON格式。如何指示 JAXB参考实现 输出JSON? 问题答案: JAXB参考实现不支持JSON,您需要添加一个包,例如Jackson或Moxy 莫西 杰克逊 在这里查看示例

  • 我试图让Jersey在我返回对象时序列化它们,就像这样: 当我用例如“john”对此执行POST请求时,它应该用的json表示来响应。但是,它所做的只是给出错误状态500,服务器记录以下内容 全局阅读器拦截器:org.glassfish.jersey.server.internal。MappableExceptionWrapperInterceptor是全局编写器拦截器:org.glassfish