JsonNullable并未与Jackson连载其价值

JsonNullable并未与Jackson连载其价值

本文介绍了JsonNullable并未与Jackson连载其价值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用JsonNullable<String>来区分缺少值和null.当我序列化Java对象User时,JsonNullable<String>字段被序列化为带有值的JSON对象

I'm trying to use JsonNullable<String> to distinguish between the absence of a value and null. When I serialize my Java object, User, the JsonNullable<String> field is serialized as a JSON object with value

{"present":false}

由于我使用undefined初始化了该字段,因此我希望它能打印{}.

I'm expecting it to print {} since I initialized the field with undefined.

这是我的课程

public class User {
  @JsonProperty("userId")
  private JsonNullable<String> userId = JsonNullable.undefined();

  //set and get
  //tostring
}

和一个小的驱动程序,我实际上在JsonNullable字段中设置了一个值.

and a small driver program where I actually set a value within the JsonNullable field.

User user = new User();
user.setUserId(JsonNullable.of("12345"));

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());

String expectedData = objectMapper.writeValueAsString(user);
System.out.println(expectedData);

此打印

{"userId":{"present":true}}

但是我期望

{"userId":"12345"}

换句话说,我希望包装在JsonNullable中的值可以序列化到JSON中.为什么JsonNullable和Jackson表现出这种方式?

In other words, I expected the value wrapped within the JsonNullable to be serialized into the JSON. Why are JsonNullable and Jackson behaving this way?

推荐答案

作为 Wiki 指示,您需要注册相应的模块(除了您拥有的其他模块之外):

As the wiki instructs, you need to register the corresponding module (in addition to any others you have):

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.registerModule(new JsonNullableModule());

这篇关于JsonNullable并未与Jackson连载其价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-01 07:16