我试图用Jackson将一些JSON对象映射到Java对象.JSON对象中的某些字段是必需的(我可以标记@NotNull),有些是可选的.
与Jackson映射后,未在JSON对象中设置的所有字段在Java中都将具有空值.是否有类似的注释@NotNull可以告诉Jackson为Java类成员设置默认值,以防它为null?
编辑:为了使问题更清楚,这里是一些代码示例.
Java对象:
class JavaObject {
@NotNull
public String notNullMember;
@DefaultValue("Value")
public String optionalMember;
}
Run Code Online (Sandbox Code Playgroud)
JSON对象可以是:
{
"notNullMember" : "notNull"
}
Run Code Online (Sandbox Code Playgroud)
要么:
{
"notNullMember" : "notNull",
"optionalMember" : "optional"
}
Run Code Online (Sandbox Code Playgroud)
该@DefaultValue注释只是为了展示一下我问.这不是一个真正的注释.如果JSON对象与第一个示例中的相似,我想要的值optionalMember是"Value"和不是null.是否有注释可以做这样的事情?
我尝试使用以下代码反序列化我在 API 中收到的 JSON 对象:
ObjectMapper mapper = new ObjectMapper();
ExampleDto ed = mapper.readValue(req.body(), ExampleDto.class);
Run Code Online (Sandbox Code Playgroud)
我的班级使用 Lombok 生成构造函数、getter 和 setter,如下所示:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExampleDto {
private String name = "";
private List<String> values = new LinkedList<>();
}
Run Code Online (Sandbox Code Playgroud)
这两个属性都应该是可选的,如果未提供,则使用类定义中指定的默认值。但是,如果我现在尝试反序列化 JSON
{name: "Foo"}
Run Code Online (Sandbox Code Playgroud)
该values字段是null. 根据我的理解,以及我找到的所有示例代码,values应该是一个空列表。
编辑:不是重复的,因为我使用的是没有 Optionals 的 Lombok