From 88b5631d1f240c75cc897b54de2a50b7f96215ee Mon Sep 17 00:00:00 2001 From: "Lin.Liang" <546648227@qq.com> Date: Wed, 31 Jul 2019 23:05:08 +0800 Subject: [PATCH] dashboard: fix AuthorityRuleEntity and ParamFlowRuleEntity fastjson serialize problem (#889) * Add @JsonIgnore annotation --- .../entity/rule/AuthorityRuleEntity.java | 8 ++- .../entity/rule/ParamFlowRuleEntity.java | 21 +++++-- .../datasource/entity/JsonSerializeTest.java | 60 +++++++++++++++++++ 3 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/JsonSerializeTest.java diff --git a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/AuthorityRuleEntity.java b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/AuthorityRuleEntity.java index 92496201..a085d898 100644 --- a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/AuthorityRuleEntity.java +++ b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/AuthorityRuleEntity.java @@ -17,7 +17,7 @@ package com.alibaba.csp.sentinel.dashboard.datasource.entity.rule; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; import com.alibaba.csp.sentinel.util.AssertUtil; - +import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; /** @@ -26,7 +26,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; */ public class AuthorityRuleEntity extends AbstractRuleEntity { - public AuthorityRuleEntity() {} + public AuthorityRuleEntity() { + } public AuthorityRuleEntity(AuthorityRule authorityRule) { AssertUtil.notNull(authorityRule, "Authority rule should not be null"); @@ -42,16 +43,19 @@ public class AuthorityRuleEntity extends AbstractRuleEntity { } @JsonIgnore + @JSONField(serialize = false) public String getLimitApp() { return rule.getLimitApp(); } @JsonIgnore + @JSONField(serialize = false) public String getResource() { return rule.getResource(); } @JsonIgnore + @JSONField(serialize = false) public int getStrategy() { return rule.getStrategy(); } diff --git a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java index 5ffb1fe1..56bd773c 100644 --- a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java +++ b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/rule/ParamFlowRuleEntity.java @@ -15,22 +15,23 @@ */ package com.alibaba.csp.sentinel.dashboard.datasource.entity.rule; -import java.util.List; - import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowClusterConfig; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowItem; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; import com.alibaba.csp.sentinel.util.AssertUtil; - +import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.List; + /** * @author Eric Zhao * @since 0.2.1 */ public class ParamFlowRuleEntity extends AbstractRuleEntity { - public ParamFlowRuleEntity() {} + public ParamFlowRuleEntity() { + } public ParamFlowRuleEntity(ParamFlowRule rule) { AssertUtil.notNull(rule, "Authority rule should not be null"); @@ -46,61 +47,73 @@ public class ParamFlowRuleEntity extends AbstractRuleEntity { } @JsonIgnore + @JSONField(serialize = false) public String getLimitApp() { return rule.getLimitApp(); } @JsonIgnore + @JSONField(serialize = false) public String getResource() { return rule.getResource(); } @JsonIgnore + @JSONField(serialize = false) public int getGrade() { return rule.getGrade(); } @JsonIgnore + @JSONField(serialize = false) public Integer getParamIdx() { return rule.getParamIdx(); } @JsonIgnore + @JSONField(serialize = false) public double getCount() { return rule.getCount(); } @JsonIgnore + @JSONField(serialize = false) public List getParamFlowItemList() { return rule.getParamFlowItemList(); } @JsonIgnore + @JSONField(serialize = false) public int getControlBehavior() { return rule.getControlBehavior(); } @JsonIgnore + @JSONField(serialize = false) public int getMaxQueueingTimeMs() { return rule.getMaxQueueingTimeMs(); } @JsonIgnore + @JSONField(serialize = false) public int getBurstCount() { return rule.getBurstCount(); } @JsonIgnore + @JSONField(serialize = false) public long getDurationInSec() { return rule.getDurationInSec(); } @JsonIgnore + @JSONField(serialize = false) public boolean isClusterMode() { return rule.isClusterMode(); } @JsonIgnore + @JSONField(serialize = false) public ParamFlowClusterConfig getClusterConfig() { return rule.getClusterConfig(); } diff --git a/sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/JsonSerializeTest.java b/sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/JsonSerializeTest.java new file mode 100644 index 00000000..2b0718c4 --- /dev/null +++ b/sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/datasource/entity/JsonSerializeTest.java @@ -0,0 +1,60 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.dashboard.datasource.entity; + +import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.AuthorityRuleEntity; +import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.ParamFlowRuleEntity; +import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowClusterConfig; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; +import com.alibaba.fastjson.JSON; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author lianglin + * @since 1.7.0 + */ +public class JsonSerializeTest { + + @Test + public void authorityRuleJsonSerializeTest() { + AuthorityRuleEntity emptyRule = new AuthorityRuleEntity(); + Assert.assertTrue("{}".equals(JSON.toJSONString(emptyRule))); + + AuthorityRuleEntity authorityRule = new AuthorityRuleEntity(); + AuthorityRule rule = new AuthorityRule(); + rule.setStrategy(0).setLimitApp("default").setResource("rs"); + authorityRule.setRule(rule); + Assert.assertTrue("{\"rule\":{\"limitApp\":\"default\",\"resource\":\"rs\",\"strategy\":0}}".equals(JSON.toJSONString(authorityRule))); + } + + @Test + public void paramFlowRuleSerializeTest() { + ParamFlowRuleEntity emptyRule = new ParamFlowRuleEntity(); + Assert.assertTrue("{}".equals(JSON.toJSONString(emptyRule))); + + ParamFlowRuleEntity paramFlowRule = new ParamFlowRuleEntity(); + ParamFlowRule rule = new ParamFlowRule(); + rule.setClusterConfig(new ParamFlowClusterConfig()); + rule.setResource("rs").setLimitApp("default"); + paramFlowRule.setRule(rule); + Assert.assertTrue("{\"rule\":{\"burstCount\":0,\"clusterConfig\":{\"fallbackToLocalWhenFail\":false,\"sampleCount\":10,\"thresholdType\":0,\"windowIntervalMs\":1000},\"clusterMode\":false,\"controlBehavior\":0,\"count\":0.0,\"durationInSec\":1,\"grade\":1,\"limitApp\":\"default\",\"maxQueueingTimeMs\":0,\"paramFlowItemList\":[],\"resource\":\"rs\"}}" + .equals(JSON.toJSONString(paramFlowRule))); + + } + +}