SmartMVC
Все документы
Руководство
Возможности
Аутентификация
Пример
Справочник
  • 简体中文
  • English
  • 日本語
  • Русский
GitHub
Все документы
Руководство
Возможности
Аутентификация
Пример
Справочник
  • 简体中文
  • English
  • 日本語
  • Русский
GitHub
  • Основные возможности

    • Единый формат ответа
    • Исключения и проверка параметров
    • Дата и время
    • Журнал запросов

Дата и время

SmartMVC применяет единый набор правил к параметрам запроса, переменным пути, JSON во входящих запросах и JSON в ответах.

Поддерживаемые типы

ТипПараметр запросаJSON на входеJSON на выходеИспользует zone-id
LocalDateTime✓✓✓—
LocalDate✓✓✓—
LocalTime✓✓✓—
Instant✓✓✓✓
OffsetDateTime✓✓✓✓
ZonedDateTime✓✓✓✓
java.util.Date✓✓✓✓

Отдельные форматы даты, времени и даты со временем

spring:
  smart:
    mvc:
      date-time:
        request-format: yyyy-MM-dd HH:mm:ss
        response-format: yyyy-MM-dd HH:mm:ss
        date-request-format: yyyy-MM-dd
        date-response-format: yyyy-MM-dd
        time-request-format: HH:mm:ss
        time-response-format: HH:mm:ss
        zone-id: Asia/Shanghai
        incomplete-input-policy: FILL_MISSING
  • LocalDateTime использует request-format и response-format;
  • LocalDate использует отдельные форматы даты;
  • LocalTime использует отдельные форматы времени;
  • Instant, OffsetDateTime, ZonedDateTime и Date преобразуются с учётом zone-id.

Пример параметров запроса

@GetMapping("/events")
public List<EventView> events(
        @RequestParam LocalDate day,
        @RequestParam Instant from) {
    return eventService.find(day, from);
}
GET /events?day=2026-08-06&from=2026-08-06%2009:30:00

Те же строковые форматы применяются к полям JSON.

Как применяется часовой пояс

LocalDate, LocalTime и LocalDateTime сами по себе не содержат часовой пояс, поэтому их значения не сдвигаются между поясами.

Типы, представляющие конкретный момент на временной шкале, например Instant, используют zone-id:

  • локальное время без смещения при разборе интерпретируется в настроенном часовом поясе и превращается в конкретный момент;
  • при выводе значение сначала преобразуется в настроенный часовой пояс, а затем форматируется с помощью response-format.

Значение по умолчанию system-default использует часовой пояс JVM. Если окружение развёртывания может меняться, лучше явно задать часовой пояс IANA.

Стандартный ввод ISO

Помимо настроенного формата, типы со смыслом момента времени поддерживают стандартную запись ISO. Допустимые формы зависят от целевого типа:

Целевой тип...Z...+08:00...+08:00[Asia/Shanghai]
Instant✓✓—
OffsetDateTime✓✓—
ZonedDateTime✓✓✓
java.util.Date✓✓—

Например:

2026-08-06T01:30:00Z
2026-08-06T09:30:00+08:00
2026-08-06T09:30:00+08:00[Asia/Shanghai]

Правило для неполного ввода

При значении FILL_MISSING, если основной формат целевого типа не подошёл, SmartMVC пробует следующие фиксированные варианты. Каждый сокращённый вариант применим только к указанным типам:

ВводЦелевые типыРезультат дополнения
2026-08-06 09:30LocalDateTime, Instant, OffsetDateTime, ZonedDateTime, DateСекунды становятся 00
2026-08-06LocalDateTime, Instant, OffsetDateTime, ZonedDateTime, DateВремя становится 00:00:00
2026-08LocalDate и перечисленные выше типы даты и времениИспользуется первый день месяца; для типов со временем — полночь
2026LocalDate и перечисленные выше типы даты и времениИспользуется 1 января указанного года; для типов со временем — полночь
09:30LocalTimeСекунды становятся 00
09LocalTimeМинуты и секунды становятся 00

Значение REJECT запрещает такие дополнения:

spring.smart.mvc.date-time.incomplete-input-policy: REJECT

Резервный разбор ISO не зависит от этой настройки и продолжает работать для типов со смыслом момента времени.

Как выбрать тип

  • Для дня рождения, даты работы магазина и других чистых дат используйте LocalDate;
  • для локального времени ежедневной операции — LocalTime;
  • для даты и времени без семантики часового пояса — LocalDateTime;
  • для конкретного момента, передаваемого между регионами, предпочтителен Instant.
Изменить эту страницу на GitHub
Последнее обновление: 07.08.2026, 08:33
Назад
Исключения и проверка параметров
Далее
Журнал запросов