Skip to content

Commit

Permalink
DateTime correct serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Jun 25, 2019
1 parent 7d4bd61 commit 0680395
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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.
Expand All @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -51,8 +52,8 @@ public List<Version> findVersionsForEntityDescriptor(String resourceId) {
((PrincipalAwareRevisionEntity) it).getPrincipalUserName(),
((PrincipalAwareRevisionEntity) it).getRevisionDate()
.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime());
.atOffset(ZoneOffset.UTC)
.toZonedDateTime());
})
.sorted(comparing(Version::getDate))
.collect(toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}

0 comments on commit 0680395

Please sign in to comment.