如何为 Jackson 反序列化指定默认值

迈克尔
@ResponseBody
@RequestMapping(value="/getUser")
public JSONObject getContent(@ReqeustBody User user) 

这里是我的控制器代码。

@Data
public class User{
    private String username = "administrator";
    private String password = "123456";   
    private Integer age = 18;
}

这里是我的User班级代码。

{
    "username":"admin",
    "password":"000",
    "age":""
}

当我POSTJSON上面,我得到的age属性为null

我想用默认值Jackson反序列化空字段(""nullJSON

像这样:

{
    "username":"admin",
    "password":"000",
    "age":18
}

我应该怎么办?

大卫·洛伦佐·马里诺

您可以定义一个自定义的 getter 属性,在null.

   public Integer getAge() {
        if (age == null) {
            return 18;
        } else {
            return this.age;
        }
    }

请注意,您无法更改该setAge方法,因为在这种情况下它不会被调用,事实上没有age字段会通知 Jackson 调用该方法。


另一种方法是使用自定义构造函数并使用JsonSetter带有值注释Nulls.SKIP

指示应跳过输入空值且不进行赋值的值;这通常意味着该属性将具有其默认值

如下:

 public class User {
    @JsonSetter(nulls = Nulls.SKIP)
    private Integer age;

    public User() {
        this.age = 18;
    }

    ...
}

@JsonSetter是存在于包com.fasterxml.jackson.annotation,并且可以使用被导入为行家依赖性

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>YOURVERSION</version>
</dependency>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中使用Jackson将缺少的属性反序列化为默认值

Jackson-如何为接口引用的反序列化指定单个实现?

如何为Jackson编写自定义JSON反序列化器?

Jackson自定义反序列化器,用于多态对象和String文字作为默认值

Jackson反序列化-Kotlin数据类-每个映射器缺少字段的默认值

如何在反序列化的对象中保留field的默认值?

如何使用Jackson的objectMapper反序列化接口字段?

Jackson和Iterable:如何反序列化

如何用Jackson反序列化Map <?,?>?

如何用Jackson反序列化通用List <T>?

如何使用Jackson来反序列化对象变量?

我如何反序列化Jackson的秒数时间戳?

如何使用Jackson来反序列化对象数组

如何使用Jackson来反序列化JS日期?

如何将FasterXML \ Jackson中的布尔值序列化/反序列化为Int?

如何使用Jackson将反序列化的JSON反序列化为忽略键的对象?

如何使用Jackson序列化和反序列化对象列表

Jackson:反序列化和序列化后如何检测修改的对象?

如何使用 Jackson 序列化/反序列化 DefaultMutableTreeNode?

Jackson Databind-如何在不指定目标类的情况下反序列化对象?

如何在父类中指定类型时使Jackson类中没有类型属性的子类反序列化

如何在Jackson中使用本地化的十进制分隔符反序列化float值

如何使用Jackson将Java Enums序列化和反序列化为JSON对象

ServiceStack-如何反序列化DateTime,每个请求可以采用多种格式,而不会覆盖全局默认值

Jackson ObjectMapper - 从远程响应反序列化后,如何在值为 false 时排除字段?

如何不序列化默认值

如何为自定义Jackson序列化器编写JUnit-Test?

如何通过 Jackson 的元素属性将相同的 xml 元素反序列化为不同的类?(多态反序列化)

如何用Jackson序列化LocalDateTime?