Behalten XMLGregorianCalendar Datum-format nach der Konvertierung von JSON - Lib Jackson
Ich habe ein Objekt mit 2 XMLGregorianCalendar Objekte - man verwendet für Datum und andere für die Zeit. Ich benutze Jackson-Objekt-mapper-konvertieren Sie das Datum in das JSON format. Das Datum vor der Umwandlung ist 2014-02-10 & Zeit ist 11:15:00 Uhr. Nach der Umstellung auf JSON es wird {"date":1392008400000,"time":58500000}. Wie kann ich die behalten das gleiche Datum & Zeit-format ("{"date":2014-02-10,"time":11:15:00}) nach dem drucken im JSON-Format. .
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class TestJSON {
public static void main(String[] args){
Date dob=null;
Date time=null;
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
DateFormat df1=new SimpleDateFormat("hh:mm:ss");
try {
dob=df.parse("2014-02-10");
time=df1.parse("11:15:00");
} catch (ParseException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" Date = " + dob);
System.out.println(" Time = " + time);
GregorianCalendar cal = new GregorianCalendar();
GregorianCalendar cal1 = new GregorianCalendar();
try {
cal.setTime(df.parse("2014-02-10"));
cal1.setTime(df1.parse("11:15:00"));
} catch (ParseException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
XMLGregorianCalendar xmlDate = null;
XMLGregorianCalendar xmlDate1 = null;
try {
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), DatatypeConstants.FIELD_UNDEFINED);
xmlDate1 = DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal1.get(Calendar.HOUR),cal1.get(Calendar.MINUTE),cal.get(Calendar.SECOND), DatatypeConstants.FIELD_UNDEFINED);
} catch (DatatypeConfigurationException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(" Before Converting - Date " + xmlDate);
System.out.println(" Before Converting - Time " + xmlDate1);
Data data = new Data();
data.setDate(xmlDate);
data.setTime(xmlDate1);
ObjectMapper mapper = new ObjectMapper();
try {
System.out.println("After Converting " + mapper.writeValueAsString(data));
} catch (JsonProcessingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import javax.xml.datatype.XMLGregorianCalendar;
public class Data {
private XMLGregorianCalendar date;
private XMLGregorianCalendar time;
public XMLGregorianCalendar getDate() {
return date;
}
public void setDate(XMLGregorianCalendar date) {
this.date = date;
}
public XMLGregorianCalendar getTime() {
return time;
}
public void setTime(XMLGregorianCalendar time) {
this.time = time;
}
}
Funktionierenden CODE (Mit Mixins in Verbindung)
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class TestJSON {
public static void main(String[] args){
Date dob=null;
Date time=null;
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
DateFormat df1=new SimpleDateFormat("hh:mm:ss");
try {
dob=df.parse("2014-02-10");
time=df1.parse("11:15:00");
} catch (ParseException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" Date = " + dob);
System.out.println(" Time = " + time);
GregorianCalendar cal = new GregorianCalendar();
GregorianCalendar cal1 = new GregorianCalendar();
try {
cal.setTime(df.parse("2014-02-10"));
cal1.setTime(df1.parse("11:15:00"));
} catch (ParseException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
XMLGregorianCalendar xmlDate = null;
XMLGregorianCalendar xmlDate1 = null;
try {
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), DatatypeConstants.FIELD_UNDEFINED);
xmlDate1 = DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal1.get(Calendar.HOUR),cal1.get(Calendar.MINUTE),cal.get(Calendar.SECOND), DatatypeConstants.FIELD_UNDEFINED);
} catch (DatatypeConfigurationException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(" Before Converting - Date " + xmlDate);
System.out.println(" Before Converting - Time " + xmlDate1);
Data data = new Data();
data.setDate(xmlDate);
data.setTime(xmlDate1);
ObjectMapper mapper = new ObjectMapper();
try {
mapper.addMixIn(Data.class, MyMixin.class);
System.out.println("After Converting " + mapper.writeValueAsString(data));
} catch (JsonProcessingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import javax.xml.datatype.XMLGregorianCalendar;
public class Data {
private XMLGregorianCalendar date;
private XMLGregorianCalendar time;
public XMLGregorianCalendar getDate() {
return date;
}
public void setDate(XMLGregorianCalendar date) {
this.date = date;
}
public XMLGregorianCalendar getTime() {
return time;
}
public void setTime(XMLGregorianCalendar time) {
this.time = time;
}
}
import javax.xml.datatype.XMLGregorianCalendar;
import com.fasterxml.jackson.annotation.JsonFormat;
public interface MyMixin {
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
public XMLGregorianCalendar getDate();
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="HH:mm:ss")
public XMLGregorianCalendar getTime();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier
die Sie drucken wollen, ein
Date
Objekt formatiert durch seinetoString()
Methode.Hier
die Sie drucken wollen, ein
XMLGregorianCalendar
Objekt formatiert durch seinetoString()
Methode.Hier
die Sie drucken wollen, ein
String
stellt eineXMLGregorianCalendar
konvertiert einen JSON-Wert durchObjectMapper
's Standard-Konvertierung, die nimmt einfach den timestamp (Zeit in millis seit Epoche).Keines dieser Dinge sind die gleichen.
Wenn Sie möchten, dass Ihre
ObjectMapper
zu serialisieren Datum-Typen unterschiedlich, verwenden Sie das entsprechendeObjectMapper#setDateFormat(DateFormat)
Methode als erforderlich.Gibt es auch
SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
die standardmäßig aktiviert ist.JsonSerialize
und stellen Sie ein benutzerdefiniertesJsonSerializer
für jeden, eine, schreiben das Datum, und eine, schreibt die Zeit.