This is an automated email from the ASF dual-hosted git repository.

lizhanhui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new fe5c39cdb Generate legal JSON response conditionally (#4473)
fe5c39cdb is described below

commit fe5c39cdbdd95d93d94b0708c5aeb63921548e96
Author: Zhanhui Li <lizhan...@gmail.com>
AuthorDate: Fri Jun 17 11:51:46 2022 +0800

    Generate legal JSON response conditionally (#4473)
    
    * Generate illegal JSON, allowing previously released manual-parse clients 
to continue to work
---
 .../protocol/header/namesrv/GetRouteInfoRequestHeader.java   | 12 ++++++++++++
 .../rocketmq/namesrv/processor/DefaultRequestProcessor.java  | 10 +++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git 
a/common/src/main/java/org/apache/rocketmq/common/protocol/header/namesrv/GetRouteInfoRequestHeader.java
 
b/common/src/main/java/org/apache/rocketmq/common/protocol/header/namesrv/GetRouteInfoRequestHeader.java
index a2806e628..e150c5553 100644
--- 
a/common/src/main/java/org/apache/rocketmq/common/protocol/header/namesrv/GetRouteInfoRequestHeader.java
+++ 
b/common/src/main/java/org/apache/rocketmq/common/protocol/header/namesrv/GetRouteInfoRequestHeader.java
@@ -22,12 +22,16 @@ package org.apache.rocketmq.common.protocol.header.namesrv;
 
 import org.apache.rocketmq.remoting.CommandCustomHeader;
 import org.apache.rocketmq.remoting.annotation.CFNotNull;
+import org.apache.rocketmq.remoting.annotation.CFNullable;
 import org.apache.rocketmq.remoting.exception.RemotingCommandException;
 
 public class GetRouteInfoRequestHeader implements CommandCustomHeader {
     @CFNotNull
     private String topic;
 
+    @CFNullable
+    private Boolean acceptStandardJsonOnly;
+
     @Override
     public void checkFields() throws RemotingCommandException {
     }
@@ -39,4 +43,12 @@ public class GetRouteInfoRequestHeader implements 
CommandCustomHeader {
     public void setTopic(String topic) {
         this.topic = topic;
     }
+
+    public Boolean getAcceptStandardJsonOnly() {
+        return acceptStandardJsonOnly;
+    }
+
+    public void setAcceptStandardJsonOnly(Boolean acceptStandardJsonOnly) {
+        this.acceptStandardJsonOnly = acceptStandardJsonOnly;
+    }
 }
diff --git 
a/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
 
b/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
index 48a034296..94797667d 100644
--- 
a/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
+++ 
b/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
@@ -62,6 +62,7 @@ import 
org.apache.rocketmq.remoting.exception.RemotingCommandException;
 import org.apache.rocketmq.remoting.netty.AsyncNettyRequestProcessor;
 import org.apache.rocketmq.remoting.netty.NettyRequestProcessor;
 import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+import org.apache.rocketmq.remoting.protocol.RemotingSerializable;
 
 public class DefaultRequestProcessor extends AsyncNettyRequestProcessor 
implements NettyRequestProcessor {
     private static InternalLogger log = 
InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
@@ -363,9 +364,16 @@ public class DefaultRequestProcessor extends 
AsyncNettyRequestProcessor implemen
                 topicRouteData.setOrderTopicConf(orderTopicConf);
             }
 
-            byte[] content = 
topicRouteData.encode(SerializerFeature.BrowserCompatible,
+            byte[] content;
+            Boolean standardJsonOnly = 
requestHeader.getAcceptStandardJsonOnly();
+            if (request.getVersion() >= Version.V4_9_4.ordinal() || (null != 
standardJsonOnly && standardJsonOnly)) {
+                content = 
topicRouteData.encode(SerializerFeature.BrowserCompatible,
                     SerializerFeature.QuoteFieldNames, 
SerializerFeature.SkipTransientField,
                     SerializerFeature.MapSortField);
+            } else {
+                content = RemotingSerializable.encode(topicRouteData);
+            }
+
             response.setBody(content);
             response.setCode(ResponseCode.SUCCESS);
             response.setRemark(null);

Reply via email to