Spring boot XMLGregorianCalendar在使用GSON时正在更改格式

Spring boot XMLGregorianCalendar在使用GSON时正在更改格式,spring-boot,gson,json-deserialization,objectmapper,xmlgregoriancalendar,Spring Boot,Gson,Json Deserialization,Objectmapper,Xmlgregoriancalendar,我的pojo类具有数据类型为XMLGregorianCalendar的字段 protected XMLGregorianCalendar driverBirthDate; //the value is -"1967-08-13-05:45" 当我使用GSON将对象转换为json字符串时,输出会为该字段生成其他内容 Gson gson = new Gson(); String str = gson.toJson(pojoObj); 皈依后- "driv

我的pojo类具有数据类型为XMLGregorianCalendar的字段

 protected XMLGregorianCalendar driverBirthDate; //the value is  -"1967-08-13-05:45"
当我使用GSON将对象转换为json字符串时,输出会为该字段生成其他内容

Gson gson = new Gson();    
String str = gson.toJson(pojoObj);
皈依后-

"driverBirthDate": {
                    "day": 13,
                    "hour": -2147483648,
                    "minute": -2147483648,
                    "month": 8,
                    "second": -2147483648,
                    "timezone": -345,
                    "year": 1967
                }
但我需要与pojo对象完全相同的格式


任何快速帮助都会很好。

Gson将XMLGregorianCalendar输出为JSON对象的原因是,它没有用于此类型的内置适配器,因此会返回到基于反射的适配器,该适配器会发出类的所有字段的值

您可以通过创建自定义文件来解决此问题:

公共类XMLGregorianCalendarTypeAdapter扩展了TypeAdapter{
私有最终数据类型工厂数据类型工厂;
公共XMLGregorianCalendarTypeAdapter(DatatypeFactory DatatypeFactory){
this.datatypeFactory=Objects.requirennull(datatypeFactory);
}
@凌驾
公共XMLGregorianCalendar读取(JsonReader in)引发IOException{
返回datatypeFactory.newXMLGregorianCalendar(in.nextString());
}
@凌驾
public void write(JsonWriter out,XMLGregorianCalendar值)引发IOException{
out.value(value.toXMLFormat());
}
}
DatatypeFactory
javax.xml.datatype.DatatypeFactory

然后使用
GsonBuilder
创建
Gson
实例,您可以在该实例上使用该适配器:

DatatypeFactory DatatypeFactory=。。。;
Gson Gson=new GsonBuilder()
.registerTypeAdapter(
XMLGregorianCalendar.class,
//调用'nullSafe()`使适配器自己处理空值
新的XMLGregorianCalendarTypeAdapter(datatypeFactory).nullSafe()
)
.create();

也尝试使用mapper.writeValueAsString(pojoObj)在这种情况下,输出类似于“DriverBirthDate”:-75320100000,