在 JAX-RS 2.1 中,用于在 JSON 和 Java 对象之间序列化与反序列化的内部库已从 Jackson 更改为 Yasson。Yasson 是 JSON-B 的引用实施。Jackson 和 Yasson 采用不同的方式来序列化与时间相关的对象,例如:
| Jackson | Yasson | |
|---|---|---|
| java.util.Date | 726213720000 | 1993-02-05T06:02:00Z[UTC] |
| java.util.Calendar | 726213720000 | 1993-02-05T00:00:00-06:00[America/Chicago] |
产生或使用 JSON 类型数据的任何 JAX-RS 资源方法将受到影响。此规则将标记包含在由 JAX-RS 资源方法产生或使用的对象中的任何
java.util.Date 或 java.util.Calendar 字段。
以下是产生和使用包含 java.util.Date 和 java.util.Calendar 字段
的 Java 对象的 JAX-RS 资源方法示例:
这条规则标记了 java.util.Date 和 java.util.Calendar 字段。 DataObject 对象中的 和 字段。
对于该规则,将提供自动修正,以添加注释 @JsonbDateFormat(value = JsonbDateFormat.TIME_IN_MILLIS ) 以将输出转换为纪元 milliseconds.After 应用自动修正后, DataObject 类 将更新如下:
注:要访问 @javax.json.bind.annotation.JsonbDateFormat 注释,自动修复程序会在配置文件中添加 jsonb 功能。 Liberty server.xml 配置文件中添加 jsonb 功能。 例如,如果使用的是 jaxrs-2.1 功能部件,那么将添加 jsonb-1.0 功能部件。
有关 Jackson 和 Yasson 之间的行为差异的更多详细信息,请参阅 Is it time for a JSON binding standard? 文章“比较 Jackson 和 JSON-B 行为”。