【问题标题】:Spring spring.jackson.time-zone=UTC doesn't work春天 spring.jackson.time-zone=UTC 不起作用
【发布时间】:2017-12-04 17:41:06
【问题描述】:

我正在使用 Spring Boot 1.5.4、Spring Data REST、HATEOAS、Hibernate 5.2.10Final。 我正在使用 Spring Data REST 公开存储库,它工作正常。

我的模型 bean 扩展了这个类:

@TypeDefs({ @TypeDef(name = "json", typeClass = JsonStringType.class), @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) })
@EntityListeners({ AuditingEntityListener.class })
@MappedSuperclass
@Audited
public abstract class AbstractEntity extends AbstractPersistable<Long> {
    private static final long serialVersionUID = 1L;

    /* "UUID" and "UID" are Oracle reserved keywords -> "sid" */
    @Column(name = "sid", unique = true, nullable = false, updatable = false, length = 36)
    private String sid;

    @CreatedBy
    private String createdBy;

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @LastModifiedBy
    private String lastModifiedBy;

    // Trick to start version counting from 1 instead of 0
    @Version
    private long version = 1;

如您所见,我使用的是 JDK 8 LocalDateTime。在我的 pom.xml 中,我也在使用:

<dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

事实上,REST 回复以正确的方式序列化:

{
    "sid": "2b2530a4-6cc7-41a0-a7b5-9bf0466223b4",
    "createdDate": "2017-06-30T19:12:44",
    "lastModifiedDate": "2017-06-30T19:12:44",
    "lastModifiedBy": null,
    "name": "Administrator",
    "landlinePhone": null,
    "mobilePhone": null,
    "username": "admin",
    "email": "admin@email.com",
    "timeZone": "Europe/Rome",
    "cashFund": 0,
    "enabled": true,
    "roles": [
      "Amministratore"
    ],
    "activeWorkSession": null,
    "new": false
  }

由于这些属性,我将日期时间以 UTC 格式存储在数据库中,并且工作正常:

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

我希望我的 REST 端点以 UTC 格式返回日期时间,但不幸的是它不起作用。 我必须指定我的 JDK 正在使用系统默认语言环境(欧洲/罗马),并且我设置了这些应该可以解决问题的属性...

spring.jackson.time-zone=UTC
spring.jackson.deserialization.adjust_dates_to_context_time_zone=false

不幸的是,它不起作用。我错过了什么吗?

【问题讨论】:

    标签: spring hibernate spring-mvc spring-boot spring-data-rest


    【解决方案1】:

    我使用了 com.fasterxml.jackson.annotation.JsonFormat;

    从下面的依赖jar包 试试

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.1</version>
    </dependency>
    

    用下面的注解来注解类属性

    @JsonFormat(shape = JsonFormat.Shape.STRING ,pattern = "dd-MM-YYYY" , timezone="UTC") 私人日期 from_date;

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多