首页 > 解决方案 > Spring Boot:防止 Jackson 在 JSON 序列化时“重新格式化”XMLGregorianCalendar

问题描述

我的 Spring 引导应用程序查询外部 SOAP 服务。从它的 WSDL/XSD 生成类后,这就是类的样子。

如您所见,dateOfBirthis 类型为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 响应的类,但这听起来很乏味。

标签: jsonspringspring-bootjackson

解决方案


尝试像这样配置您的映射器:

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;
}

更多控制:https ://www.baeldung.com/jackson-annotations

来源:https ://github.com/FasterXML/jackson-docs


推荐阅读