在反序列化过程中(据我了解,这是将JSON数据转换为Java对象的过程),我如何告诉杰克逊,当它读取不包含数据的对象时,应将其忽略吗?
我正在使用Jackson 2.6.6和Spring 4.2.6
我的控制器收到的JSON数据如下:
{
"id": 2,
"description": "A description",
"containedObject": {}
}
问题是对象“
containedObject”按原样解释,并且正在实例化。因此,一旦我的控制器读取此JSON数据,它就会生成ContainedObject对象类型的实例,但我需要将其设置为null。
最简单,最快的解决方案是,在接收到的JSON数据中,该值为null,如下所示:
{
"id": 2,
"description": "A description",
"containedObject": null
}
但这是不可能的,因为我无法控制发送给我的JSON数据。
是否存在适用于反序列化过程且对我的情况有帮助的注释(如此处解释的注释)?
我留下了我的班级的代表以获取更多信息:
我的实体类如下:
public class Entity {
private long id;
private String description;
private ContainedObject containedObject;
//Contructor, getters and setters omitted
}
而我所包含的对象类如下:
public class ContainedObject {
private long contObjId;
private String aString;
//Contructor, getters and setters omitted
}
我会用一个JsonDeserializer
。检查相关字段,确定是否为该字段emtpy
并返回null
,因此您ContainedObject
将为null。
这样的东西(半伪):
public class MyDes extends JsonDeserializer<ContainedObject> {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
//read the JsonNode and determine if it is empty JSON object
//and if so return null
if (node is empty....) {
return null;
}
return node;
}
}
然后在您的模型中:
public class Entity {
private long id;
private String description;
@JsonDeserialize(using = MyDes.class)
private ContainedObject containedObject;
//Contructor, getters and setters omitted
}
希望这可以帮助!
问题内容: 在反序列化过程中(据我了解,这是将JSON数据转换为Java对象的过程),我如何告诉Jackson,当它读取不包含数据的对象时,应该忽略它吗? 我正在使用Jackson 2.6.6和Spring 4.2.6 我的控制器收到的JSON数据如下: 问题是对象“ containedObject”按原样解释,并且正在实例化。因此,控制器读取此JSON数据后,它将立即生成ContainedObj
我的控制器接收到的JSON数据如下: 问题是对象“ContainedObject”被解释为是,并且它正在被实例化。因此,只要我的控制器读取这个JSON数据,它就会生成一个ContainedObject对象类型的实例,但我需要它为空。 最简单、最快的解决方案是,在接收的JSON数据中,该值为空,如下所示: 我的实体类如下: 和包含的对象类,如下所示:
问题内容: 我有一个JSON字符串,将标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到类似以下的字符串: 我想将其反序列化为Parent类,并将子级正确设置为一个空的子级列表。 对于上述JSON字符串,我想要一个对象,其设置为,而设置为。 我会知道如何在整个课堂上使用注释 然后 但是,我想解决一个从字符串正确实例化List的一般问题: 我能得到类似的东西吗? 问题答案: 几个选择;
我对jackson进行了配置,以便在和时给出一个简单的字符串表示。这可以在序列化过程中找到,例如,当我在REST API上获得数据时。 但反过来就不行了。当我试图将数据发送到服务器,并且应该将JSON解析为java对象时,会引发此异常: 很抱歉没有提到我在单元测试中。 TestClass:
问题内容: 现在,首先,我已经在该站点上阅读了其他答案,以及有关杰克逊序列化的其他答案,但它们都提供了忽略字段的方法。但是,在Java中,不能为。 我正在尝试将Java对象转换为,但忽略任何字段。这适用于字符串,但最终会采用if 值(如果未初始化),因为not 不会被忽略。 谁能对此有所启发? 编辑:为澄清起见,我尝试使用该类作为数据类型,但导致转换为字符串以引发JsonProcessingExc
问题内容: 我有一个杰克逊问题。 有没有一种方法可以反序列化可能具有两种类型的属性,对于某些对象,它看起来像这样 然后对于其他人则显示为空数组,即 任何帮助表示赞赏! 谢谢! 问题答案: Jackson目前没有内置配置来自动处理这种特殊情况,因此必须进行自定义反序列化处理。 以下是这种自定义反序列化的外观示例。 (您可以使用DeserializationConfig.Feature.ACCEPT_