在使用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: