diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AbstractAuditable.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AbstractAuditable.java index 445d4cc92..89560f04f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AbstractAuditable.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AbstractAuditable.java @@ -41,14 +41,14 @@ public abstract class AbstractAuditable implements Auditable { @CreationTimestamp @CreatedDate - @Column(nullable = false, updatable = false) - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS") + @Column(nullable = false, updatable = false, columnDefinition = "DATETIME(9)") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS") private LocalDateTime createdDate; @UpdateTimestamp @LastModifiedDate - @Column(nullable = false) - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS") + @Column(nullable = false, columnDefinition = "DATETIME(9)") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS") private LocalDateTime modifiedDate; @Column(name = "created_by") diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/frontend/EntityDescriptorRepresentation.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/frontend/EntityDescriptorRepresentation.java index 821d9817d..c662b1388 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/frontend/EntityDescriptorRepresentation.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/frontend/EntityDescriptorRepresentation.java @@ -10,12 +10,14 @@ import javax.validation.constraints.NotNull; import java.io.Serializable; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; public class EntityDescriptorRepresentation implements Serializable { private static final long serialVersionUID = 7753435553892353966L; + private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS"); private List assertionConsumerServices; @@ -98,7 +100,7 @@ public String getCreatedBy() { } public String getCreatedDate() { - return createdDate != null ? createdDate.toString() : null; + return createdDate != null ? formatter.format(createdDate) : null; } public String getEntityId() { @@ -125,7 +127,7 @@ public MduiRepresentation getMdui() { } public String getModifiedDate() { - return modifiedDate != null ? modifiedDate.toString() : null; + return modifiedDate != null ? formatter.format(modifiedDate) : null; } @JsonIgnore @@ -134,7 +136,6 @@ public LocalDateTime getModifiedDateAsDate() { return modifiedDate != null ? modifiedDate : createdDate != null ? createdDate : LocalDateTime.now(); } - public OrganizationRepresentation getOrganization() { return organization; } @@ -245,4 +246,4 @@ public void setServiceProviderSsoDescriptor(ServiceProviderSsoDescriptorRepresen public void setVersion(int version) { this.version = version; } -} +} \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy index 3ab919759..fe62a5770 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy @@ -3,6 +3,7 @@ package edu.internet2.tier.shibboleth.admin.ui import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.ShibUIConfiguration @@ -23,6 +24,10 @@ import org.springframework.context.annotation.ComponentScan import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Import import org.springframework.context.annotation.Primary +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder + +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL @@ -68,10 +73,12 @@ class BaseDataJpaTestConfiguration { @Bean ObjectMapper objectMapper() { - ObjectMapper mapper = new ObjectMapper() + JavaTimeModule module = new JavaTimeModule() + LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS")) + module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer) + ObjectMapper mapper = Jackson2ObjectMapperBuilder.json().modules(module).featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build() mapper.enable(SerializationFeature.INDENT_OUTPUT) mapper.setSerializationInclusion(NON_NULL) - mapper.registerModule(new JavaTimeModule()) mapper.registerModule(new StringTrimModule()) return mapper } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy index 84f6cb33c..5473be2c2 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy @@ -1,9 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.security.controller import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.databind.SerializationFeature -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.controller.support.RestControllersSupport import edu.internet2.tier.shibboleth.admin.ui.security.model.Group @@ -11,21 +8,14 @@ import edu.internet2.tier.shibboleth.admin.ui.security.model.User import edu.internet2.tier.shibboleth.admin.ui.util.WithMockAdmin import groovy.json.JsonOutput import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.TestConfiguration -import org.springframework.context.annotation.Bean import org.springframework.http.MediaType -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder import org.springframework.test.annotation.Rollback -import org.springframework.test.context.ContextConfiguration import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.springframework.transaction.annotation.Transactional import org.springframework.web.client.HttpClientErrorException import org.springframework.web.util.NestedServletException -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter - import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch @@ -34,7 +24,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status -@ContextConfiguration(classes=[UCILocalConfig]) @Rollback class UsersControllerIntegrationTests extends AbstractBaseDataJpaTest { @Autowired @@ -311,16 +300,4 @@ class UsersControllerIntegrationTests extends AbstractBaseDataJpaTest { then: result.andExpect(status().isNotFound()) } - - @TestConfiguration - private static class UCILocalConfig { - @Bean - ObjectMapper objectMapper() { - JavaTimeModule module = new JavaTimeModule() - LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS")) - module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer) - - return Jackson2ObjectMapperBuilder.json().modules(module).featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build() - } - } -} +} \ No newline at end of file