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;
+        }
+    }
 }