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

使用Jackson反序列化JSON时的隐式默认值

钱安和
2023-03-14

当反序列化各种JSON消息时,我希望为某种类型的属性提供默认值。通常建议简单地在类中指定值,但如果必须跨许多类这样做,这很容易出错。您可能会忘记一个值,并以null而不是默认值结束。我的意图是将每个可选 的属性设置为optional.abast。由于null正是optional试图消除的内容,因此将它们与Jackson一起使用是令人沮丧的。

Jackson允许您自定义反序列化过程的大多数特性都集中在作为输入的JSON上,而不是围绕实例化要反序列化到的对象的过程。我似乎最接近通用解决方案的方法是构建自己的valueInstantiator,但还有两个问题:

  • 如何使它只将可选实例化为缺席而不干扰实例化过程的其余部分?
  • 如何将最终结果连接到我的ObjectMapper
  • 抽象父类(需要声明
  • 自定义生成器/Creator/JSONDeserializer(每个适用的类都需要注释)
  • 米欣的?我尝试了这个方法,并结合了反射,但我不知道如何访问我混入的类...

共有1个答案

古凌
2023-03-14

对于java.lang.optional,有一个Jackson团队自己开发的模块:https://github.com/fasterxml/jackson-datatype-jdk8

Https://github.com/fasterxml/jackson-datatype-guava可选

它将为NULL创建一个optional.externat,但不为缺席的JSON值创建:-(。

private Optional<Xxx> xxx = Optional.absent();
private List<Yyy> yyys = Lists.newArrayList();
 类似资料:
  • 我尝试使用以下代码反序列化API中接收的JSON对象: 我的类使用Lombok生成构造函数、getter和setter,如下所示: 这两个属性都应该是可选的,如果没有提供,则使用类定义中指定的默认值。但是,如果我现在尝试反序列化JSON 字段为。根据我的理解,以及我找到的所有示例代码,应该是一个空列表。 编辑:不是重复的,因为我使用的是没有选项的Lombok

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

  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 我目前正在开发一个Java web应用程序,它使用Magento REST API公开的JSON数据。api返回的数据示例如下: 我的应用程序中有一个Java类,如下所示: 我想对数据进行反序列化,并将其转换为,但我总是得到以下错误: 这是我用来将JSON响应反序列化为ArrayList的语句行: 有人能分享一些见解吗?我看到一些例子,返回的JSON对象前面没有任何ID。那是因为我做错了什么吗?非

  • 像这样: 我该怎么办?

  • 问题内容: 我正在使用Flickr API 。调用该方法时,默认的JSON结果为: 我想将此响应解析为Java对象: JSON属性应按以下方式映射: 不幸的是,我无法找到一种使用Annotations做到这一点的好方法。到目前为止,我的方法是将JSON字符串读入a 并从中获取值。 但是我认为,这是有史以来最不优雅的方式。有没有简单的方法,可以使用注释还是自定义反序列化器? 这对我来说将是很明显的,