Да, я уверен. Это часть моего файла свойств: #Jackson spring.jackson.mapper.infer-property-mutators = false spring.jackson.time-zone = UTC

ользую Spring Boot 1.5.4, Hibernate 5.2.10, Spring Data REST, HATEOAS, JDK8 с LocalDate и LocalDateTime. Мой компьютер находится в часовом поясе CEST, но я хочу, чтобы приложение работало в UTC, поэтому я установил в application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/database?useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=true
spring.jpa.hibernate.jdbc.time_zone = UTC

Согласно этомустатья Я не хочу менять часовой пояс моей JVM, потому что, похоже, это не лучшая практика.

Spring Data REST предоставляет мои репозитории, и я использую Swagger2, чтобы иметь хороший интерфейс для использования API. Когда я пробую конечную точку, я вижу что-то вроде:

    {
  "_embedded": {
    "dailyCodes": [
      {
        "sid": "d495cdaa-14f2-44cb-a98f-8aa6ddd43d91",
        "createdDate": "2017-06-28T16:20:01",
        "lastModifiedDate": "2017-06-28T16:20:01",
        "lastModifiedBy": "admin",
        "date": "2017-06-28",
        "code": "js",
        "new": false,
        "_links": {
          "self": {
            "href": "http://localhost:8080/api/v1/dailyCodes/1"
          },
          "dailyCode": {
            "href": "http://localhost:8080/api/v1/dailyCodes/1"
          }
        }
      }

Как вы можете видеть, формат даты и времени в порядке, а также он показывает время CEST, даже если в БД реальное время - 14:20:01. Я думаю, что это неправильно, потому что мой REST API должен работать в UTC.

Как я мог достичь этого результата?

Всегда в той же теме, у меня есть конечная точка REST (предоставляемая Spring Data REST) ​​для поиска с использованием параметров LocalDate; я использую

@Transactional
@PreAuthorize("isAuthenticated()")
public interface DailyCodeRepository extends PagingAndSortingRepository<DailyCode, Long> {

@Query("SELECT d FROM DailyCode d WHERE (:code IS NULL or code=:code) AND (:from IS NULL OR date>=:from) AND (:to IS NULL OR date<=:to)")
    public Page<DailyCode> findAllWithParameter(@Param("code") @RequestParam(value = "code", required = false) String code,
            @Param("from") @RequestParam(value = "from", required = false) LocalDate from,
            @Param("to") @RequestParam(value = "to", required = false) LocalDate to, Pageable pageable);
}

Также в этом случае у меня странная вещь: если я вызываю параметры передачи конечной точки, на сервер они приходят с 1 днем ​​меньше. Кроме того, принятый шаблон даты, по-видимому, является JDK по умолчанию для моей локали (итальянский), но я думаю, что это не лучший способ.

Есть ли лучшая практика, которой нужно следовать, чтобы избежать проблем с аргументами даты / времени в обоих направлениях?

Ответы на вопрос(0)

Ваш ответ на вопрос