相关疑难解决方法(0)

使用Jackson进行映射时,将默认值设置为空字段

我试图用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.是否有注释可以做这样的事情?

java json jackson

60
推荐指数
5
解决办法
9万
查看次数

Jackson 反序列化默认值缺失

我尝试使用以下代码反序列化我在 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

java jackson lombok deserialization json-deserialization

4
推荐指数
1
解决办法
4252
查看次数