json - Spring Boot:防止 Jackson 在 JSON 序列化时“重新格式化”XMLGregorianCalendar
问题描述
我的 Spring 引导应用程序查询外部 SOAP 服务。从它的 WSDL/XSD 生成类后,这就是类的样子。
如您所见,dateOfBirth
is 类型为XMLGregorianCalendar
。SOAP 响应包含以下格式的出生日期:1991-11-08+01:00
.
public class Applicant {
// other properties
@XmlElement(required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar dateOfBirth;
// getters & setters
}
Spring 应用程序从 SOAP 服务接收响应主体,并将其“按原样”作为 Jackson 序列化的 JSON 返回给其调用客户端。问题是,杰克逊似乎将其序列dateOfBirth
化为另一种格式。
这是 cilent 最终收到的格式:
{
"dateOfBirth": "1976-11-12T23:00:00.000+00:00"
}
是否有一些配置或自定义实现我可以使用,以便杰克逊不会重新格式化这个日期?在最坏的情况下,我可以编写一个映射 SOAP 响应的类,但这听起来很乏味。
解决方案
尝试像这样配置您的映射器:
mapper.setDateFormat(new SimpleDateFormat("dd-MM-yyyy+hh:mm"));
这应该可以,但是如果您想要更多控制权,可以使用 @JsonFormat 注释:
public class Applicant {
@XmlElement(required = true)
@XmlSchemaType(name = "date")
@JsonFormat( shape = JsonFormat.Shape.STRING, pattern ="dd-MM-yyyy+hh:mm")
protected XMLGregorianCalendar dateOfBirth;
}
推荐阅读
- yaml - 使用 yq 将 YAML 合并到特定的数组条目中
- c# - 组合框绑定问题
- c# - Node JS运行ac#程序
- python - 设置背包问题中物品数量的最小和最大约束
- java - 当 Eclipse 甚至无法打开时更改不兼容的 JVM
- vbscript - 在文档末尾插入图片,然后用 vbs 将其转换为 docx
- python - 将 R 命名数组转换为 Python
- reactjs - 在 Ionic React 中获取组件挂载的位置并传递给 App 状态
- ssl - SSL 配置,然后使用 httpd、modjk 和 openAM Fedlet 请求重定向到 JBOSS 以进行单点登录
- javascript - 您可能需要一个额外的加载器来处理这些加载器在 NUXT 应用程序和 HEROKU 平台中的结果