Итак, я столкнулся с проблемой в моем приложении Spring. Пользователь может вводить даты с помощью инструмента выбора даты, и они хранятся в базе данных Mysql с помощью Hibernate. Таблица использует поле даты для их хранения, поэтому это не экономит время. Проблема в том, что сервер настроен на GMT, а наши пользователи - EST или GMT-5. Таким образом, дата правильно сохраняется в базе данных, но затем, когда она отображается во внешнем интерфейсе, она всегда показывает предыдущую дату. Раздражает меня, потому что я не экономлю время, но, очевидно, это все еще влияет на вещи. Во всяком случае, 10/10/2001 будет отображаться на переднем крае как 12/09/2011. Я посмотрел на это, и мне не разрешено менять сервер на EST, поэтому я сейчас пытаюсь решить эту проблему с помощью Jodatime (если у кого-то нет идеи, что я делаю что-то еще, чтобы вызвать это) или более простое решение .
Моя проблема в том, что я не могу найти никакой хорошей информации о том, как использовать Jodatime с Spring. В настоящее время я просто пытаюсь изменить один объект с использования java Date
на использование joda LocalDate
. Независимо от того, что я пытаюсь сделать, я получаю сообщения об ошибках «неверный заголовок потока» и «не могу десериализовать», когда он пытается извлечь объект даты из базы данных и вставить его в объект LocalDate
.
Может ли кто-нибудь дать мне руководство о том, что мне нужно сделать для хранения и извлечения, чтобы это работало?
Я использую Spring 3.1 с аннотациями и всем этим хорошим материалом. Я рад предоставить код, но так как я не уверен, что с этим делать, у меня нет кода, который, на мой взгляд, был бы полезен. Я мог бы действительно использовать некоторую помощь в целом от JSP до базы данных и обратно. Я думаю, что главное, в чем я не уверен, это как хранить это на сервере, и я думаю, именно поэтому я получаю ошибки Hibernate. База данных использует дату, как я уже упоминал, поэтому не хранит время. Как я могу преобразовать LocalDate в это?
Вот некоторый код, если он помогает:
Доменный объект
@Entity
public class Provision {
@Id @GeneratedValue
private Long id;
private LocalDate startDate;
//Getters and setters
}
У меня есть DatePropertyEditor для преобразования текста в дату между JSP и Spring:
public class DatePropertyEditor extends PropertyEditorSupport {
@Override
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("yyyy-MM-dd").parse(value));
} catch (ParseException e) {
setValue(null);
}
}
@Override
public String getAsText() {
if(getValue() != null)
return new SimpleDateFormat("yyyy-MM-dd").format((Date) getValue());
else
return null;
}
}
А вот некоторые из JSP, куда вводятся данные:
<td align="right">Start Date:</td>
<td><sf:input path="startDate" dojoType="dijit.form.DateTextBox" required="true" hasDownArrow="true"
onChange="dijit.byId('endDate').constraints.min = arguments[0];" constraints="{datePattern:'MMM d, y'}" />
</td>
Ни один из остальной части кода не имеет отношения к объектам Date и не касается их, все остальное обрабатывается посредством аннотаций и внедрения, а что нет.