Как мне манипулировать датами в SpEL?

Как я могу манипулировать датами на языке Spring Expression?

<si:service-activator id="entryReader" expression="@blogEntryReader.getEntriesBetweenDates(payload.startDate, payload.startDate **PLUS 30 DAYS**)" input-channel="blogEntryReaderChannel"/>

3 ответа

Решение

К сожалению, у java.util.Calendar нет API-интерфейса разработчика, поэтому он не является SpEL-дружественным. Одним из решений будет использование вспомогательного класса...

public static class CalendarManip {

    public static Date addDays(Date date, int days) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_YEAR, 30);
        return cal.getTime();
    }
}

Затем в SpEL...

T(foo.CalendarManip).addDays(payload.startDate, 30)

Вы также можете использовать , если вам не нужен вспомогательный класс.

T(org.apache.commons.lang.time.DateUtils).addDays(payload.startDate, 30)

Если у вас есть доступ к более аккуратному способу сделать это, написав нужные вам функции манипулирования датами и вставив их в SpelEvaluationContext:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html

Другие вопросы по тегам