如何使用XsonGregorianCalendar与gson的fromJson和toJson方法?

Har*_*Raj 2 jaxb gson

我的项目的主题是提供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.

Har*_*Raj 8

希望,这可以解决我使用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)