Я конвертирую SOAP WS в REST WS для клиента. Теперь в объекте типа данных есть поле, тип возвращаемого значения XMLGregorianCalendar.
Поскольку мне нужно сохранить структуру ввода / вывода одинаковой, я не могу изменить имена переменных, а также их тип возвращаемого значения.
В Rest WS мы используем объекты json в качестве возврата.
Процесс: - Мы отправили ввод в dto, а затем вызвали процедуру, получили ответ от процедуры в формате java.util.date.
Теперь мне нужно изменить этот java.util.date (Numbers) на Date, имеющий тот же формат, что и XMLGregorianCalendar.
Заранее спасибо за помощь.
Я попробовал следующий код.
изменен тип возвращаемого значения переменной DTO на java.util.Date
private Date informeFechaDlgncmnto;
@JsonSerialize(using = JsonDateTimeSerializer.class)
public Date getInformeFechaDlgncmnto() {
return informeFechaDlgncmnto;
}
public void setInformeFechaDlgncmnto(Date informeFechaDlgncmnto) {
this.informeFechaDlgncmnto = informeFechaDlgncmnto;
}
JsonDateTimeSerializer Class
private static final SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS");
@Override
public void serialize(Date date, JsonGenerator gen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
String formattedDate = formatter.format(date);
gen.writeString(formattedDate);
}
Токовый выход для REST WS: -
"informeFechaDlgncmnto": "2019-04-09T12: 20: 44.000",
SOAP WS Code
переменная в DTO
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar informeFechaDlgncmnto;
public XMLGregorianCalendar getInformeFechaDlgncmnto() {
return informeFechaDlgncmnto;
}
public void setInformeFechaDlgncmnto(XMLGregorianCalendar value) {
this.informeFechaDlgncmnto = value;
}
Код для изменения в gregorianCalendar в Servicelayer
private ConsultaFuratRespType addTZInformeFechaDlgncmnto(
ConsultaFuratRespType consultaFuratRespType) {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS");
simpleDateFormat.setTimeZone(TimeZone
.getTimeZone("UTC-0700";));
Calendar gregorianCalendar = new GregorianCalendar(
TimeZone.getTimeZone("UTC-0700";));
gregorianCalendar = consultaFuratRespType.getData().getDatosFurat()
.getInformeFechaDlgncmnto().toGregorianCalendar();
String gregorianCalendarString = simpleDateFormat
.format(gregorianCalendar.getTime());
Date date = simpleDateFormat.parse(gregorianCalendarString);
GregorianCalendar gregCalInformeFechaDlgncmnto = new GregorianCalendar(
TimeZone.getTimeZone(ConstantesApp.TIMEZONE_UTC_MINUS_5000));
gregCalInformeFechaDlgncmnto = (GregorianCalendar) GregorianCalendar
.getInstance();
gregCalInformeFechaDlgncmnto.setTime(date);
consultaFuratRespType.getData().getDatosFurat()
.setInformeFechaDlgncmnto(gregCalInformeFechaDlgncmnto);
return consultaFuratRespType;
} catch (DatatypeConfigurationException e) {
return consultaFuratRespType;
} catch (Exception e) {
return consultaFuratRespType;
}
Вывод в SOAPUI
2019-04-09T12: 20: 44.0-05: 00
Вывод должен быть таким же.
Токовый выход: -
SOAP WS: - 2019-04-09T12: 20: 44.0-05: 00
REST WS: - 2019-04-09T12: 20: 44.000