Spring spring.jackson.time-zone = UTC不起作用

时间:2017-06-30 17:22:29

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

我正在使用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

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

1 个答案:

答案 0 :(得分:0)

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

从下面的依赖jar包 试试

odbcConnection cn = new ODBC.connection;
cn.connectionString = blah blah;
cn.open();

使用以下注释

注释类属性

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