我的项目的主题是提供XML格式的数据并使用google-gson获取Json格式,我从XML模式生成JAXB生成的Java POJO,其中我有一个XMLGregorianCalendar数据类型的变量.
我给出了以下XML输入,并从gson.toJson()方法获取json格式;
<?xml version="1.0" encoding="UTF-8"?>
<EmpRequest xmlns="http://java.com/Employee">
<EmplIn>
<EmpID>12</EmpID>
<Empname>sara</Empname>
<Designation>SA</Designation>
<DOJ>2002-05-30T09:30:10+06:00</DOJ>
</EmplIn>
</EmpRequest>
Run Code Online (Sandbox Code Playgroud)
但在输出中,我得到了以下内容.
{"emplIn":{"empID":"12","empname":"sara","designation":"SA","doj":{}}}
Run Code Online (Sandbox Code Playgroud)
我浏览了谷歌并得到了添加xml架构并使用字符串更改XmlGregorianCalendar数据类型的建议.但我不想从两个方面实现它.
我的意思是如何通过gson的fromJson和toJson方法使用XmlGregorianCalendar数据类型获得正确的输出?
非常感谢你,Harish Raj.
希望,这可以解决我使用google-gson的问题.
(在创建Gson对象的地方应添加以下内容)
步骤1:
Gson gson =
new GsonBuilder().registerTypeAdapter(XMLGregorianCalendar.class,
new XGCalConverter.Serializer()).registerTypeAdapter(XMLGregorianCalendar.class,
new XGCalConverter.Deserializer()).create();
Run Code Online (Sandbox Code Playgroud)
第2步:我们需要创建XGCalConverter类,如下所示.
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class XGCalConverter
{
public static class Serializer implements JsonSerializer
{
public Serializer()
{
super();
}
public JsonElement serialize(Object t, Type type,
JsonSerializationContext jsonSerializationContext)
{
XMLGregorianCalendar xgcal=(XMLGregorianCalendar)t;
return new JsonPrimitive(xgcal.toXMLFormat());
}
}
public static class Deserializer implements JsonDeserializer
{
public Object deserialize(JsonElement jsonElement, Type type,
JsonDeserializationContext jsonDeserializationContext)
{
try
{
return DatatypeFactory.newInstance().newXMLGregorianCalendar(jsonElement.getAsString());
}
catch(Exception ex)
{
ex.printStackTrace();
return null;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10928 次 |
| 最近记录: |