From 068039572b9397af623e6fd1be6caae5e73494ff Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 25 Jun 2019 11:15:04 -0400 Subject: [PATCH] DateTime correct serialization --- .../admin/ui/domain/versioning/Version.java | 6 ++++-- .../EnversEntityDescriptorVersionService.java | 5 +++-- .../VersionJsonSerializationBasicTests.groovy | 16 ++++++++++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/Version.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/Version.java index ce3687507..100b0fdbd 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/Version.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/Version.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.versioning; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -8,7 +9,7 @@ import lombok.ToString; import java.io.Serializable; -import java.time.LocalDateTime; +import java.time.ZonedDateTime; /** * Represents version information of any versioned entity in the system. @@ -25,7 +26,8 @@ public class Version implements Serializable { private String creator; - private LocalDateTime date; + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + private ZonedDateTime date; private static final long serialVersionUID = 3429591830989243421L; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java index 91dccd5af..b623d1ec4 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java @@ -15,6 +15,7 @@ import javax.persistence.PersistenceContext; import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.Arrays; import java.util.Comparator; import java.util.List; @@ -51,8 +52,8 @@ public List findVersionsForEntityDescriptor(String resourceId) { ((PrincipalAwareRevisionEntity) it).getPrincipalUserName(), ((PrincipalAwareRevisionEntity) it).getRevisionDate() .toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDateTime()); + .atOffset(ZoneOffset.UTC) + .toZonedDateTime()); }) .sorted(comparing(Version::getDate)) .collect(toList()); diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/VersionJsonSerializationBasicTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/VersionJsonSerializationBasicTests.groovy index 585369249..011fe7033 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/VersionJsonSerializationBasicTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/versioning/VersionJsonSerializationBasicTests.groovy @@ -2,36 +2,40 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.versioning import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import groovy.json.JsonSlurper import spock.lang.Specification -import java.time.LocalDateTime -import java.time.Month +import java.time.ZonedDateTime class VersionJsonSerializationBasicTests extends Specification { ObjectMapper mapper + JsonSlurper jsonSlurper + def setup() { mapper = new ObjectMapper() mapper.registerModule(new JavaTimeModule()) + jsonSlurper = new JsonSlurper() } def "Verify basic Version JSON serialization"() { given: - def staticDate = LocalDateTime.of(2019, Month.MAY,20,15,0,0) + def staticDate = ZonedDateTime.parse("2019-05-20T15:00:00.574Z") def version = new Version('2', 'kramer', staticDate) def expectedJson = """ { "id": "2", "creator": "kramer", - "date": "2019-05-20T15:00" + "date": "2019-05-20T15:00:00.574Z" } """ + def expectedJsonMap = jsonSlurper.parseText(expectedJson) when: - def deSerialized = mapper.readValue(expectedJson, Version) + def deSerializedJsonMap = jsonSlurper.parseText(mapper.writeValueAsString(version)) then: - deSerialized == version + deSerializedJsonMap.date == expectedJsonMap.date } }