首页 > 解决方案 > 我如何确定 Java 类型是否可从 JSON 转换为 JSON

问题描述

JSON-B 将类型转换LocalDate为简单的字符串。当我有 aType时,如何确定 JSON-B 是否会直接转换这种类型,即它是否是标量类型?

我没有实例,所以我什至不能尝试将其转换为字符串并查看它是否包含花括号。

或者我是否必须寻找具有valueOforparse方法或构造函数的类型只有一个 String 参数?

标签: javajsonb-api

解决方案


可以提前检查给定类型是否可以序列化为 JSON(即从强类型转换为弱类型格式),但是没有办法检查给定类型是否可以反序列化为 POJO,直到你有运行时的实际 JSON 值(即从弱类型格式转换为强类型格式)。

一般来说,可序列化类型的规则很简单:

  • 类必须是可访问的(公共的或受保护的)
  • 如果类是内部类,它必须是静态的
  • 零个或多个包含/返回可序列化类型的公共字段/getter

一般来说,可反序列化的类型的规则是:

  • 类必须是可访问的(公共的或受保护的)
  • 如果类是内部类,它必须是静态的
  • 零个或多个包含/返回可反序列化类型的公共字段/设置器
  • 该类必须有一个公共的无参数构造函数(或一个用 注释的 ctor @JsonbCreator
  • 或该类必须有一个带有注释的公共静态工厂方法@JsonbCreator

您可能会发现构成“可转换类型”的内容是 JSON-B(或任何其他 Java JSON 库)中的一个非常广泛的标准。例如,{}可以将 JSON 字符串反序列化为具有公共无参数构造函数的任何类型。同样,没有公共字段或 getter 方法的 Java 类将序列化为 JSON 字符串{}

由于可转换类型是一个如此广泛的术语,因此如果您进一步指定您想要实现的目标会有所帮助 - 也许我可以建议一种更具体的方法。


附加信息:

支持 JDK 中的许多常用类。有关完整列表,请参阅JSON-B 规范的第 3.3 - 3.5 节。除了内置类之外,JSON-B 规范的第 3.7 节还指定了要求。

对于反序列化,比序列化有更多的要求。它们在第 3.7 节和第 4.5节中有详细描述。


推荐阅读