【问题标题】:is there a way to configure paritally or fully serializion to json using jersey?有没有办法使用球衣将部分或全部序列化配置为 json?
【发布时间】:2015-03-11 10:52:32
【问题描述】:

我想用 jersey 序列化一个 java 对象。

我想将其序列化并打印到文件中。

这是一个大对象,我想保存两次:

一个简短版本,仅包含必填字段。

第二个完整版本的所有字段。

除了创建两个 DTO 之外,还有其他方法吗

并从大对象中复制小对象,然后将它们都序列化为json?

【问题讨论】:

  • 必须使用 Jersey 或者您可以添加 Jackson ?如果你能做到这一点,可能添加一个自定义序列化程序将是解决方案。检查此链接baeldung.com/jackson-custom-serialization
  • 谢谢。球衣的目的与杰克逊的目的是什么?我可以使用custom serializer 创建非平面对象吗?

标签: java json file serialization jersey


【解决方案1】:

为了加快速度,Jersey 帮助制作 REST Web 服务,Jackson 帮助管理 JSON 对象。 因此,您可以同时使用这两种方法,并有更多方式来玩您的对象。

扩展 JsonSerializer 您可以提供 2 个具有您想要的行为的自定义序列化程序。我不会重新发布我发表评论的链接,但其中有一个示例。 可以肯定的是,对我来说,非平面对象是具有私有属性的对象,这些属性是业务对象。如果是,是的,您可以序列化非平面对象。

要序列化非平面对象,我认为有两种方法。我的开发基于我在 cmets 中提供的链接(项目、用户、主类......)。 第一个,组合的很简单,所以我可以使用这样的东西:

        jgen.writeStartObject();
        jgen.writeNumberField("id", value.id);
        jgen.writeStringField("itemName", value.itemName);

        jgen.writeObjectFieldStart("owner");
        jgen.writeNumberField("id", value.owner.id);
        jgen.writeStringField("name", value.owner.name);
        jgen.writeEndObject();

        jgen.writeEndObject();

在这种情况下,所有者由两个字段组成,非常简单。

第二种解决方案是使用另一个序列化程序: 一个用于主要对象,一个用于复合和使用:

jgen.writeObjectField("owner.", value.owner);

并且不要忘记添加组合对象序列化器:

module.addSerializer(User.class, new UserSerializer());

希望有帮助

【讨论】:

  • 非平面我的意思是复合对象。与非原始成员
  • 很好,我就是这么理解的
  • 你能添加一个例子吗?我只看到 falt 对象示例:{ "id": 25, "itemName": "FEDUfRgS", "owner": 15 }
  • 如何序列化列表?
  • 使用 writeArrayFieldStart 然后 writeObject 用于列表的所有字段并由 writeEndArray 完成。
猜你喜欢
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多