Разобрался. Достаточно переопределить класс PropertyEditorSupport и зарегистрировать его. В методе setAsText, куда поступает строка с датой, уже можно обрабатывать как угодно.
Выкладываю решение, на случай, если кому-то понадобится.
В контроллере необходимо добавить метод, в котором регистрируется editor:
@InitBinder
public final void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new UnixTimestampDateEditor(true));
}
Класс editor'а, который обрабатывает unix timestamp(основательно не тестировался, но общая идея ясна):
import org.springframework.util.StringUtils;
import java.beans.PropertyEditorSupport;
import java.util.Date;
public class UnixTimestampDateEditor extends PropertyEditorSupport {
private boolean allowEmpty;
public UnixTimestampDateEditor(boolean allowEmpty) {
this.allowEmpty = allowEmpty;
}
public UnixTimestampDateEditor(boolean allowEmpty, Object source) {
super(source);
this.allowEmpty = allowEmpty;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
try {
if (this.allowEmpty && !StringUtils.hasText(text)) {
setValue(null);
} else {
long unixTimestamp = Long.parseLong(text);
if (unixTimestamp < 0) {
throw new IllegalArgumentException("argument < 0 ");
}
Date date = new Date(unixTimestamp * 1000);
setValue(date);
}
} catch (NumberFormatException pe) {
throw new IllegalArgumentException("Could not parse date: " + pe.getMessage(), pe);
}
}
}