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

如何只序列化Jackson子的ID

王君墨
2023-03-14
问题内容

在使用Jackson(fasterxml.jackson
2.1.1)时,是否有内置的方式仅序列化子的ID?我们要发送一个Order通过REST的Person参考文件。但是person对象非常复杂,我们可以在服务器端刷新它,因此我们需要的只是主键。

还是我需要一个定制的序列化器?还是我需要@JsonIgnore其他所有属性?这样可以防止Person在请求Order对象时将数据发送回去吗?我不确定是否需要,但我想尽可能控制它。


问题答案:

有几种方法。第一个是使用@JsonIgnoreProperties来删除子级的属性,如下所示:

public class Parent {
   @JsonIgnoreProperties({"name", "description" }) // leave "id" and whatever child has
   public Child child; // or use for getter or setter
}

另一种可能性,如果Child对象始终被序列化为id:

public class Child {
    // use value of this property _instead_ of object
    @JsonValue
    public int id;
}

还有一种方法是使用 @JsonIdentityInfo

public class Parent {
   @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
   @JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
   public Child child; // or use for getter or setter

   // if using 'PropertyGenerator', need to have id as property -- not the only choice
   public int id;
}

这也适用于序列化,并忽略id以外的属性。结果不会包装为对象。



 类似资料:
  • 在下面的示例中,我有一个主类-A和它的子类-B。两者都可以用作一般类X中的属性。 如何使用Jackson多态特性将以下给定的json正确反序列化为各自的类: JSON A: JSON B: 预期结果:将keys对象映射到JSON A的类A和JSON B的类B。 请提出其他建议。

  • 或者我需要一个自定义序列化程序来完成这个任务吗?还是需要所有其他属性?在请求对象时,这是否会阻止数据发回?我还不确定我是否需要它,但如果可能的话,我想控制它。

  • 我有一个带有一些方法ma、mb、mc的对象A,这个对象实现了一个只有ma和mb的接口B。 当我序列化B时,我希望只有ma和mb作为json响应,但我也得到mc。 我希望自动化这种行为,以便我序列化的所有类都基于接口而不是实现进行序列化。 我该怎么做? 例子: 实现: 序列化: 回应: 预期响应:

  • 下面是输出: 我的分级文件中的版本号:

  • 好的,我知道有一堆类似的问题,但似乎都行不通。 我为我的实体设置了以下结构。 在我的控制器中,我尝试将一个请求映射到下面的方法。 请尝试%1 我认为它是这样做的--添加了一个元数据属性,该属性将存储子类类。 结果是什么。 结果是什么。 即使将和添加到这两个子类中,也会得到相同的结果。 其他尝试 我试了很多。什么都不起作用。不会包含这里的所有内容。 我觉得应该有一个简单的方法来做到这一点,但我只是不

  • 我得到了以下代码: 我得到了这个: {"时间":{"小时": 20,"分钟": 49,"秒": 42,"纳米": 99000000,"一天": 19,"一天":"星期四","月":"一月","一天": 19,"年": 2017,"月值": 1,"年表":{"id":"ISO","calendarType":"iso8601"}}} 我要实现的是ISO8601中的字符串 2017-01-19T18: