From 07469e42413b9967ced9191624eacc3cfe893292 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 11 Feb 2019 14:31:48 -0500 Subject: [PATCH] Removes forcing of dates to timestamps as false. This lets the user decide via properties. fixes gh-147 --- .../jackson/BusJacksonIntegrationTests.java | 23 ++++++++++++++++++- .../jackson/BusJacksonAutoConfiguration.java | 9 +++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java b/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java index 8663183..b45dc01 100644 --- a/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java +++ b/spring-cloud-bus-tests/src/test/java/org/springframework/cloud/bus/jackson/BusJacksonIntegrationTests.java @@ -1,10 +1,14 @@ package org.springframework.cloud.bus.jackson; import java.util.Collection; +import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import com.fasterxml.jackson.databind.SerializationFeature; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,7 +34,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT) +@SpringBootTest(webEnvironment = RANDOM_PORT, + properties = "spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS:true") public class BusJacksonIntegrationTests { @LocalServerPort @@ -43,9 +48,18 @@ public class BusJacksonIntegrationTests { private BusJacksonMessageConverter converter; @Test + @SuppressWarnings("unchecked") public void testCustomEventSerializes() { assertThat(converter.isMapperCreated()).isFalse(); + // set by configuration + assertThat(converter.getMapper().getSerializationConfig() + .isEnabled(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)).isTrue(); + + Map map = rest.getForObject("http://localhost:" + port + "/date", Map.class); + assertThat(map).containsOnlyKeys("date"); + assertThat(map.get("date")).isInstanceOf(Long.class); + rest.put("http://localhost:"+port+"/names"+"/foo", null); rest.put("http://localhost:"+port+"/names"+"/bar", null); @@ -96,6 +110,13 @@ public class BusJacksonIntegrationTests { publisher.publishEvent(new NameEvent(this, busServiceMatcher.getServiceId(), name)); } + @GetMapping("/date") + public Map testTimeJsonSerialization(){ + Map map = new HashMap<>(); + map.put("date", new Date()); + return map; + } + @EventListener public void handleNameSaid(NameEvent event) { this.names.add(event.getName()); diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java index dd9f407..555f304 100644 --- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java +++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/jackson/BusJacksonAutoConfiguration.java @@ -102,8 +102,12 @@ class BusJacksonMessageConverter extends AbstractMessageConverter } } - public boolean isMapperCreated() { - return mapperCreated; + /* for testing */ boolean isMapperCreated() { + return this.mapperCreated; + } + + /* for testing */ ObjectMapper getMapper() { + return this.mapper; } public void setPackagesToScan(String[] packagesToScan) { @@ -177,7 +181,6 @@ class BusJacksonMessageConverter extends AbstractMessageConverter @Override public void afterPropertiesSet() throws Exception { - this.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); this.mapper.registerModule(new SubtypeModule(findSubTypes())); } }