当前位置: 首页 > 知识库问答 >
问题:

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

王旺
2023-03-14
@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;
}
{
    "username":"admin",
    "password":"000",
    "age":""
}

像这样:

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

我该怎么办?

共有1个答案

沈畅
2023-03-14

您可以定义一个自定义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;
    }

    ...
}
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>YOURVERSION</version>
</dependency>
 类似资料:
  • 我尝试使用以下代码反序列化API中接收的JSON对象: 我的类使用Lombok生成构造函数、getter和setter,如下所示: 这两个属性都应该是可选的,如果没有提供,则使用类定义中指定的默认值。但是,如果我现在尝试反序列化JSON 字段为。根据我的理解,以及我找到的所有示例代码,应该是一个空列表。 编辑:不是重复的,因为我使用的是没有选项的Lombok

  • 我想通过扩展默认的反序列化器来创建自己的反序列化器,在其后面设置更多的值: 如您所见,我还想将此DTO母类重用于其他DTO。 我没有找到任何这样的例子。我真的是世界上第一个 反序列化的“AsUsual”(p,ctxt)应该是什么 我应该使用什么motherclass?JsonDeserializer/StdDeserializer/UntypedObjectDeserializer 反序列化程序会

  • 假设我正在为某个类编写自定义序列化,但希望使用默认方法处理其中一个字段。 那要怎么做? 序列化时,我们有。 但反序列化的相应方法是什么? 请注意以下代码: 如何实现MyOuterDeserializer?

  • 但这只有在保证先设置start的情况下才起作用。

  • 我在Jackson的自定义反序列化程序中有一个问题。我想访问默认序列化程序来填充我要反序列化到的对象。在填充之后,我将执行一些自定义操作,但首先我要使用默认的Jackson行为反序列化对象。 这是我现在有的代码。 我需要的是一种初始化默认反序列化器的方法,这样我就可以在开始我的特殊逻辑之前预填充我的POJO。 当从自定义反序列化程序内调用deserialize时,无论我如何构造序列化程序类,该方法

  • 我有下面的课: 我希望它从Jackson处理的以下JSON中反序列化。 jackson-datatype-joda(https://github.com/fasterxml/jackson-datatype-joda) 自定义序列化程序(公共类JodaDateTimeJsonSerializer扩展JsonSerializer{...}-Spring@ResponseBody Jackson Js