我有以下JSON输入:
{
"teachers": null,
"students": [],
"janitors": ["J1", "J2"]
}
它将映射到这个学校
对象。
public class School {
// Child JSON arrays reflecting JSON input
private List<String> teachers = new ArrayList<>();
private List<String> students = new ArrayList<>();
private List<String> janitors = new ArrayList<>();
// Getters and Setters
public List<String> getTeachers() {
return teachers;
}
public void setTeachers(List<String> teachers) {
this.teachers = teachers;
}
public List<String> getStudents() {
return students;
}
public void setStudents(List<String> students) {
this.students = students;
}
public List<String> getJanitors() {
return janitors;
}
public void setJanitors(List<String> janitors) {
this.janitors = janitors;
}
}
这是我到目前为止的映射器配置:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Jackson库反序列化JSON输入后,尽管将其初始化为数组,但我仍然得到了school.教师=null。我初始化这些数组的原因是为了避免不必要的空检查。
如何让Jackson反序列化器忽略空值或忽略它无法映射到的空节点?
可以在类中使用@jsoninclude(jsoninclude.include.non_null)
。
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class School {
// Child JSON arrays reflecting JSON input
private List<String> teachers = new ArrayList<>();
private List<String> students = new ArrayList<>();
private List<String> janitors = new ArrayList<>();
}
也可以在字段级别使用;以防您希望某些字段为空。
import com.fasterxml.jackson.annotation.JsonInclude;
public class School {
// Child JSON arrays reflecting JSON input
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<String> teachers = new ArrayList<>();
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<String> students = new ArrayList<>();
private List<String> janitors = new ArrayList<>();
}
因此,在上面的场景中,如果janitors为null,它将显示为null。
当反序列化各种JSON消息时,我希望为某种类型的属性提供默认值。通常建议简单地在类中指定值,但如果必须跨许多类这样做,这很容易出错。您可能会忘记一个值,并以而不是默认值结束。我的意图是将每个的属性设置为。由于正是试图消除的内容,因此将它们与Jackson一起使用是令人沮丧的。 Jackson允许您自定义反序列化过程的大多数特性都集中在作为输入的JSON上,而不是围绕实例化要反序列化到的对象的过程。
我尝试使用以下代码反序列化API中接收的JSON对象: 我的类使用Lombok生成构造函数、getter和setter,如下所示: 这两个属性都应该是可选的,如果没有提供,则使用类定义中指定的默认值。但是,如果我现在尝试反序列化JSON 字段为。根据我的理解,以及我找到的所有示例代码,应该是一个空列表。 编辑:不是重复的,因为我使用的是没有选项的Lombok
像这样: 我该怎么办?
考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则
我想通过扩展默认的反序列化器来创建自己的反序列化器,在其后面设置更多的值: 如您所见,我还想将此DTO母类重用于其他DTO。 我没有找到任何这样的例子。我真的是世界上第一个 反序列化的“AsUsual”(p,ctxt)应该是什么 我应该使用什么motherclass?JsonDeserializer/StdDeserializer/UntypedObjectDeserializer 反序列化程序会
我有JSON反序列化和映射到枚举的问题。我从外部API获取JSON,类似于下面两个例子: 我想将空值映射到一些默认的枚举值。 模型对象 和枚举类 对于exists,值模型类包含正确的枚举,但如果我从API获取< code>null,它在模型中仍然是< code>null。 我试图创建一些由< code>@JsonCreator注释的方法,使用< code > @ JsonEnumDefaultVa