You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by ji...@apache.org on 2022/03/17 08:53:34 UTC
[rocketmq-spring] branch master updated: [ISSUE #426]Fix deserialize LocalDateTime failed when using jdk8 (#438)
This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-spring.git
The following commit(s) were added to refs/heads/master by this push:
new f541079 [ISSUE #426]Fix deserialize LocalDateTime failed when using jdk8 (#438)
f541079 is described below
commit f541079eb8a2064a0ac04c48188d21712de549f2
Author: zhangjidi2016 <zh...@cmss.chinamobile.com>
AuthorDate: Thu Mar 17 16:53:27 2022 +0800
[ISSUE #426]Fix deserialize LocalDateTime failed when using jdk8 (#438)
---
rocketmq-spring-boot-parent/pom.xml | 6 ++++
rocketmq-spring-boot/pom.xml | 4 +++
.../spring/support/RocketMQMessageConverter.java | 10 +++++-
.../rocketmq/spring/support/RocketMQUtilTest.java | 42 ++++++++++++++++++++--
4 files changed, 58 insertions(+), 4 deletions(-)
diff --git a/rocketmq-spring-boot-parent/pom.xml b/rocketmq-spring-boot-parent/pom.xml
index 21af4d6..8826db1 100644
--- a/rocketmq-spring-boot-parent/pom.xml
+++ b/rocketmq-spring-boot-parent/pom.xml
@@ -165,6 +165,12 @@
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
diff --git a/rocketmq-spring-boot/pom.xml b/rocketmq-spring-boot/pom.xml
index 7480576..b4b2f03 100644
--- a/rocketmq-spring-boot/pom.xml
+++ b/rocketmq-spring-boot/pom.xml
@@ -99,6 +99,10 @@
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/RocketMQMessageConverter.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/RocketMQMessageConverter.java
index 51a6719..0741c7d 100644
--- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/RocketMQMessageConverter.java
+++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/RocketMQMessageConverter.java
@@ -17,6 +17,9 @@
package org.apache.rocketmq.spring.support;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.util.ArrayList;
import java.util.List;
import org.springframework.messaging.converter.ByteArrayMessageConverter;
@@ -53,7 +56,12 @@ public class RocketMQMessageConverter {
messageConverters.add(byteArrayMessageConverter);
messageConverters.add(new StringMessageConverter());
if (JACKSON_PRESENT) {
- messageConverters.add(new MappingJackson2MessageConverter());
+ MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
+ ObjectMapper mapper = converter.getObjectMapper();
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ mapper.registerModule(new JavaTimeModule());
+ converter.setObjectMapper(mapper);
+ messageConverters.add(converter);
}
if (FASTJSON_PRESENT) {
try {
diff --git a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/support/RocketMQUtilTest.java b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/support/RocketMQUtilTest.java
index c5ae817..78a91e0 100644
--- a/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/support/RocketMQUtilTest.java
+++ b/rocketmq-spring-boot/src/test/java/org/apache/rocketmq/spring/support/RocketMQUtilTest.java
@@ -16,12 +16,13 @@
*/
package org.apache.rocketmq.spring.support;
+import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
+import java.nio.charset.Charset;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.Arrays;
-import org.apache.rocketmq.acl.common.AclClientRPCHook;
-import org.apache.rocketmq.acl.common.SessionCredentials;
import org.apache.rocketmq.common.UtilAll;
-import org.apache.rocketmq.remoting.RPCHook;
import org.junit.Test;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
@@ -119,6 +120,19 @@ public class RocketMQUtilTest {
}
@Test
+ public void testConvertLocalDateTimeWithRocketMQMessageConverter() {
+ TestMessage message = new TestMessage("localDateTime test",
+ LocalDateTime.of(2022, 3, 7, 12, 0, 0));
+ String str = new String(JSON.toJSONString(message).getBytes(), Charset.forName("UTF-8"));
+ RocketMQMessageConverter messageConverter = new RocketMQMessageConverter();
+ Object obj = messageConverter.getMessageConverter().fromMessage(MessageBuilder.withPayload(str).build(), TestMessage.class);
+ assertEquals(true, obj instanceof TestMessage);
+ assertEquals("localDateTime test", ((TestMessage) obj).getBody());
+ assertEquals("2022-03-07 12:00:00",
+ ((TestMessage) obj).getTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ }
+
+ @Test
public void testConvertToSpringMessage() {
org.apache.rocketmq.common.message.MessageExt rocketMsg = new org.apache.rocketmq.common.message.MessageExt();
rocketMsg.setTopic("test");
@@ -149,4 +163,26 @@ public class RocketMQUtilTest {
}
return instanceName.substring(0, index);
}
+
+ static class TestMessage {
+ private String body;
+ private LocalDateTime time;
+
+ public TestMessage() {
+
+ }
+
+ public TestMessage(String body, LocalDateTime time) {
+ this.body = body;
+ this.time = time;
+ }
+
+ public LocalDateTime getTime() {
+ return time;
+ }
+
+ public String getBody() {
+ return body;
+ }
+ }
}