У меня есть объект, который имеет 2 объекта XMLGregorianCalendar - один используется для даты, а другой используется для времени. Я использую Mapper объекта Jackson для преобразования даты в формате JSON. Дата перед конвертацией - 2014-02-10 & раз 11:15:00. После преобразования в JSON он становится {"date": 1392008400000, "time": 58500000}. Как сохранить ту же дату & формат времени ({"date": 2014-02-10, "time": 11: 15: 00}) после печати в JSON. ,Сохранить формат даты XMLGregorianCalendar после преобразования в JSON - Jackson Lib
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;
}
}
РАБОЧИЙ КОД (С Mixins)
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();
}
Thx Sotirios! Я придумал эту программу, чтобы изолировать проблему, с которой я столкнулся, как часть более крупного проекта. Я потребляю внешнюю службу и преобразовываю ее в JSON, передавая объект, возвращенный ObjectMapper. Эта большая полезная нагрузка имеет 1 элемент для даты и другой для времени, как указано выше. Я хочу вернуть дату и время в том же формате, который был получен от моей службы. Когда я использую ObjectMapper # setDateFormat(), он применяется к элементам даты и времени. Я хочу, чтобы дата была отформатирована как «MM-DD-YYY» и не нужна временная часть, и я хочу, чтобы время было «hh: mm: ss». Я обновил код –
Я использовал mapper.configure (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false), и я вижу {"date": "2014-02-10T05: 00: 00.000 + 0000", "time": "1970-01-01T16: 15: 00.000 + 0000" }. Однако мне хотелось бы {«date»: 2014-02-10, «время»: 11: 15: 00}. –
@PunterVicky Вы как бы полностью изменили свой вопрос. Просто комментируйте свои поля с помощью 'JsonSerialize' и предоставляйте индивидуальный' JsonSerializer' для каждого, который пишет дату, и тот, который записывает время. –