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);