Spring boot XMLGregorianCalendar在使用GSON时正在更改格式
我的pojo类具有数据类型为XMLGregorianCalendar的字段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
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,