Попробуйте использовать ваш метод dateFormat()
. Вы можете запустить это, чтобы увидеть, как это работает. Я немного упростил это.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
public class LocalDateAdapter {
public DateTimeFormatter dateFormat() {
DateTimeFormatter mmddyyyySlash = DateTimeFormatter.ofPattern("MM/dd/yyyy");
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(mmddyyyySlash).toFormatter();
return formatter;
}
public LocalDate unmarshal(String v) throws Exception {
DateTimeFormatter formatter = dateFormat();
return LocalDate.parse(v, formatter);
}
public String marshal(LocalDate v) {
return v.format(dateFormat());
}
public static void main(String[] args) {
LocalDate date = LocalDate.now();
LocalDateAdapter adapter = new LocalDateAdapter();
String dateAsString = adapter.marshal(date);
System.out.println("Date as String: " + dateAsString);
LocalDate dateAsDate = adapter.unmarshal(dateAsString);
System.out.println("Date back as LocalDate: " + adapter.marshal(dateAsDate));
}
}
Редактировать
Обновлено, чтобы показать, как marshall()
и unmarshall()
могут использоваться для указания правильного сохранения информации о дате.
Это теперь печатает:
Date as String: 07/05/2019
Date back as LocalDate: 07/05/2019
Обновление
Вот пример того, как использовать @XmlJavaTypeAdapter
, чтобы различать, когда использовать один тип адаптера против другого для разных форматов даты.
Не зная более широкого системного контекста, это один из способов, которым вы могли бы принудительно установить, какой форматтер использовать.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
class DateWithSlashAdapter extends XmlAdapter<String, LocalDate> {
public DateTimeFormatter dateFormat() {
return DateTimeFormatter.ofPattern("MM/dd/yyyy");
}
@Override
public LocalDate unmarshal(String v) {
DateTimeFormatter formatter = dateFormat();
return LocalDate.parse(v, formatter);
}
@Override
public String marshal(LocalDate v) {
return v.format(dateFormat());
}
}
class DateWithHyphenAdapter extends XmlAdapter<String, LocalDate> {
public DateTimeFormatter dateFormat() {
return DateTimeFormatter.ofPattern("MM-dd-yyyy");
}
@Override
public LocalDate unmarshal(String v) {
DateTimeFormatter formatter = dateFormat();
return LocalDate.parse(v, formatter);
}
@Override
public String marshal(LocalDate v) {
return v.format(dateFormat());
}
}
/** Example of a class representing your SOAP payload */
class SoapRequestExample {
@XmlJavaTypeAdapter(DateWithSlashAdapter.class)
LocalDate someDateWithSlashes;
@XmlJavaTypeAdapter(DateWithHyphenAdapter.class)
LocalDate someDateWithHyphens;
}