Jackson OffsetDateTime 序列化 Z 而不是 +00:00 时区?

2024-04-17

我将 Spring Boot 与以下 ObjectMapper 一起使用:

@Bean
public ObjectMapper objectMapper()
{
    final ObjectMapper mapper = new ObjectMapper();

    mapper.enable(SerializationFeature.INDENT_OUTPUT);

    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);  
    mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true)); // Makes no difference to output

    mapper.findAndRegisterModules();

    return mapper;
}

当 OffsetDateTimes 被序列化并在响应中返回时,它们的格式如下:

"2020-02-28T12:28:29.01Z"
"2020-02-28T12:36:21.885Z"

我本来希望最后的时区信息看起来像这样:

"2020-02-28T10:41:25.287+00:00"

我在这里遗漏或做错了什么,或者无论如何我可以将时区信息序列化为+00:00格式而不是885Z格式?

非常感谢!


以下步骤可以解决此问题(摘自https://stackoverflow.com/a/41893238/12177456 https://stackoverflow.com/a/41893238/12177456),也感谢@Ralf Wagner 和@deHaar:

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
  <version>2.6.5</version>
</dependency>
public class OffsetDateTimeSerializer extends JsonSerializer<OffsetDateTime>
{
    private static final DateTimeFormatter ISO_8601_FORMATTER = DateTimeFormatter
        .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
        .withZone(ZoneId.of("UTC"));

    @Override
    public void serialize(OffsetDateTime value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException
    {
        if (value == null) {
            throw new IOException("OffsetDateTime argument is null.");
        }

        jsonGenerator.writeString(ISO_8601_FORMATTER.format(value));
    }
}
@Bean
public ObjectMapper objectMapper()
{

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    objectMapper.registerModule(new JavaTimeModule());
    SimpleModule simpleModule = new SimpleModule();

    simpleModule.addSerializer(OffsetDateTime.class, new OffsetDateTimeSerializer());
    objectMapper.registerModule(simpleModule);

    return objectMapper;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson OffsetDateTime 序列化 Z 而不是 +00:00 时区? 的相关文章

随机推荐

  • 重新启动 Vaadin 应用程序时抛出 java.io.NotSerializedException

    当我重新启动 Tomcat 时 出现以下错误 2014 10 01 15 49 47 055 WARN com vaadin event ListenerMethod localhost startStop 2 Error in seria
  • 如何判断一个对象是否是 Mockito 模拟对象?

    是否可以在代码中判断给定对象是否是 Mockito 模拟对象 我想这样做的原因是在使用模拟时返回不同的错误消息 这将用于向其他开发人员建议他们应该使用预先准备的模拟 该模拟已经设置为以有用的方式应答呼叫 而不是自己创建模拟 目前我拥有的最好
  • 《How To Make a Tile-Based Game with Cocos2D 2.X》用cocos2d V3制作本教程

    我有一个小问题 在本教程中如何使用 Cocos2D 2 X 制作基于图块的游戏 http www raywenderlich com 29458 how to make a tile based game with cocos2d 2 x使
  • 当活动处于后台或不在后台时,Firebase 通知不起作用

    我的编码与 firebase 示例代码提供的相同 当 Activity 处于前台状态或打开时 它可以正常工作 但是 当活动关闭或处于后台状态时 它就无法正常工作 问题是这样的 不显示应用程序的应用程序图标 默认情况下以应用程序名称作为通知标
  • 为什么基元的包装类没有 setter?

    包装类 如 Integer Double 等 没有为其内部原始值设置 setter 的原因是什么 我问这个问题是因为这种功能可以简化微积分 并使 Java 语言更加灵活 让我举一些例子 1 我们看下面的例子 Integer x new In
  • 通过adb获取sdcard目录

    我正在制作一个应用程序 它通过 adb 从设备 SD 卡中提取文件 由 Android 应用程序保存 问题是不同的设备 有不同的SD卡目录 i e sdcard SD卡 external sd 首先我发明了以下解决方案 运行 adb she
  • 如何解决“安装包:当前环境没有打开的解决方案。”

    我有一个包含 1 个项目的解决方案 打开包管理器控制台 运行 Install Package MSBuildTasks 但它给了我一个错误 Install Package The current environment doesn t ha
  • 使用 getActivity() 进行强制转换安全吗?

    我正在编写一个有父级的应用程序Activity和几个孩子Fragments 我正在尝试让片段与父活动进行通信 我知道有几种方法可以做到这一点 包括创建一个接口并在父活动中实现它 不过 我对这个方法很感兴趣 ParentActivity ac
  • 禁用 sympy 中的自动简化

    我想禁用 sympy 中的自动简化 例如求解方程x y x我想要得到x x代替1 import sympy from sympy abc import x y z expr x y x sympy solve expr y gt 1 i w
  • 为什么 `head` 需要 `()` 而 `shape` 不需要?

    在下面的代码中 我将 csv 文件导入到 Python 的 pandas 库中并显示前 5 行 并查询 pandas 数据框的 形状 import pandas as pd data pd read csv my file csv data
  • 链接对象文件时出现“未定义的引用”错误[重复]

    这个问题在这里已经有答案了 我意识到这个问题已经通过多种方式提出 包括这个非常全面的答案 https stackoverflow com questions 12573816 what is an undefined reference u
  • DropBox Mac 客户端如何工作?

    我一直在看DropBox http www getdropbox com install os macMac 客户端和我目前正在研究为不同的服务实现类似的界面 他们究竟是如何与这样的取景器交互的 我非常怀疑文件夹中表示的这些对象是每次加载时
  • 颤振卡顶部半径被图像覆盖

    当我向卡片添加图像时 卡片顶部的半径被覆盖 我该如何解决 当我向卡片添加图像时 卡片顶部的半径被覆盖 我该如何解决 class App extends StatelessWidget override Widget build BuildC
  • Razor 语法和 JavaScript

    作为测试 我将我们编写的概念验证应用程序从 Web 表单转换为 Razor 以便我们可以对其进行评估 到目前为止 我遇到了一个让我头疼的问题 生成客户端 Javascript 网络表格
  • PHP oci8 无法通过 pecl 安装:“致命错误:oci8_dtrace_gen.h”

    我正在尝试将我的 fedora 25 网络服务器 php 连接到 Oracle 数据库 为此 我需要 pecl 安装 oci8 但是我收到这个错误 bin sh var tmp pear build roottqYEC6 oci8 2 1
  • Erlang - 导入 GPG 公钥

    我正在尝试在 Erlang 中做一些与公钥相关的事情 它们要求我跟踪公钥 根据这一页 http www erlang org doc apps public key using public key html id61611 我应该能够通过
  • 通过 Spring 集成从分页 REST 服务读取和下载

    目前我正在开发一个 Spring Integration 应用程序 该应用程序具有以下场景 An int http outbound gateway从 REST Services 读取分页元素列表 about in 每个页面内容被分割并存储
  • 导航组件中操作和目的地之间的差异

    我想问一下Android导航系统中Action和Destination有什么区别 https developer android com guide navigation navigation getting started https d
  • Android 布局 - 下面的列表视图和编辑文本

    我试图模仿 HTC SMS 应用程序 传统视图 的行为 其中显示所有消息 并在下面显示 EditText 正如您在屏幕截图中看到的 向上滚动时 EditText 从底部滚动 即使阅读了多篇文章 例如带有 ListView 和按钮的 Andr
  • Jackson OffsetDateTime 序列化 Z 而不是 +00:00 时区?

    我将 Spring Boot 与以下 ObjectMapper 一起使用 Bean public ObjectMapper objectMapper final ObjectMapper mapper new ObjectMapper ma