You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by li...@apache.org on 2022/06/17 03:52:00 UTC
[rocketmq] branch develop updated: Generate legal JSON response conditionally (#4473)
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 <li...@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);