You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by mi...@apache.org on 2018/09/28 07:34:00 UTC

[incubator-dubbo-ops] branch develop updated: update baseDTO

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

min pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-ops.git


The following commit(s) were added to refs/heads/develop by this push:
     new 3412f5d  update baseDTO
3412f5d is described below

commit 3412f5de704cdc205962cdb760fde947db05c8bb
Author: nzomkxia <z8...@gmail.com>
AuthorDate: Fri Sep 28 15:33:41 2018 +0800

    update baseDTO
---
 .../admin/controller/LoadBalanceController.java    |  67 +-
 .../admin/controller/OverridesController.java      |  44 ++
 .../dubbo/admin/controller/RoutesController.java   |  82 +-
 .../dubbo/admin/controller/ServiceController.java  |  39 +-
 .../dubbo/admin/controller/WeightController.java   |  34 +-
 .../org/apache/dubbo/admin/dto/BalancingDTO.java   |  35 +-
 .../admin/dto/{RouteDTO.java => OverrideDTO.java}  |  74 +-
 .../java/org/apache/dubbo/admin/dto/RouteDTO.java  |  21 +-
 .../{domain/ServiceDO.java => dto/ServiceDTO.java} |  14 +-
 .../ServiceDetailDTO.java}                         |   4 +-
 .../java/org/apache/dubbo/admin/dto/WeightDTO.java |  13 +-
 .../org/apache/dubbo/admin/filter/LoginFilter.java |   6 +-
 .../i18n/impl/MessageResourceServiceImpl.java      |   2 +-
 .../service/impl/OverrideServiceImpl.java          |   2 +-
 .../governance/service/impl/OwnerServiceImpl.java  |   2 +-
 .../service/impl/ProviderServiceImpl.java          |   3 +-
 .../admin/governance/sync/util/SyncUtils.java      |   2 +-
 .../admin/registry/common/domain/Provider.java     |   2 +-
 .../admin/registry/common/route/OverrideUtils.java |   2 +-
 .../admin/registry/common/route/RouteRule.java     |   8 +-
 .../admin/registry/common/route/RouteUtils.java    |   2 +-
 .../admin/registry/common/util/OverrideUtils.java  |   2 +-
 .../web/mvc/governance/OverridesController.java    | 868 ++++++++++-----------
 .../mvc/governance/ServiceDetailController.java    |   2 +-
 .../web/mvc/governance/ServicesController.java     |   2 +-
 .../org/apache/dubbo/admin/web/pulltool/Tool.java  |   8 +-
 .../src/components/AccessControl.vue               |   1 +
 .../src/components/LoadBalance.vue                 |  72 +-
 dubbo-admin-frontend/src/components/Overrides.vue  |  10 +-
 .../src/components/RoutingRule.vue                 |  70 +-
 .../src/components/ServiceSearch.vue               |   4 +-
 .../src/components/WeightAdjust.vue                |  65 +-
 32 files changed, 753 insertions(+), 809 deletions(-)

diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
index 6544e2a..1f33968 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
@@ -18,17 +18,18 @@
 package org.apache.dubbo.admin.controller;
 
 import org.apache.dubbo.admin.dto.BalancingDTO;
+import org.apache.dubbo.admin.dto.BaseDTO;
 import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.registry.common.domain.LoadBalance;
 import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.util.OverrideUtils;
-import org.apache.dubbo.admin.util.YamlUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
+
+import static org.apache.dubbo.admin.registry.common.util.OverrideUtils.overrideToLoadBalance;
 
 @RestController
 @RequestMapping("/api/balancing")
@@ -39,15 +40,14 @@ public class LoadBalanceController {
 
     @RequestMapping(value = "/create", method = RequestMethod.POST)
     public boolean createLoadbalance(@RequestBody BalancingDTO balancingDTO) {
-        String serviceName = balancingDTO.getServiceName();
-        String rule = balancingDTO.getRule();
+        String serviceName = balancingDTO.getService();
         if (serviceName == null || serviceName.length() == 0) {
             //TODO throw exception
         }
-
-        Map<String, Object> result = YamlUtil.loadString(rule);
-        LoadBalance loadBalance = generateLoadbalance(result);
+        LoadBalance loadBalance = new LoadBalance();
         loadBalance.setService(serviceName);
+        loadBalance.setMethod(formatMethodName(balancingDTO.getMethodName()));
+        loadBalance.setStrategy(balancingDTO.getStrategy());
         overrideService.saveOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
         return true;
     }
@@ -55,33 +55,37 @@ public class LoadBalanceController {
     @RequestMapping(value = "/update", method = RequestMethod.POST)
     public boolean updateLoadbalance(@RequestBody BalancingDTO balancingDTO) {
         Long id = balancingDTO.getId();
-        String rule = balancingDTO.getRule();
         Override override = overrideService.findById(id);
         if (override == null) {
             //TODO throw exception
         }
-        LoadBalance old = OverrideUtils.overrideToLoadBalance(override);
-        Map<String, Object> result = YamlUtil.loadString(rule);
-        LoadBalance loadBalance = generateLoadbalance(result);
+        LoadBalance old = overrideToLoadBalance(override);
+        LoadBalance loadBalance = new LoadBalance();
+        loadBalance.setStrategy(balancingDTO.getStrategy());
+        loadBalance.setMethod(formatMethodName(balancingDTO.getMethodName()));
         loadBalance.setService(old.getService());
         loadBalance.setId(old.getId());
         overrideService.updateOverride(OverrideUtils.loadBalanceToOverride(loadBalance));
         return true;
     }
 
-    @RequestMapping(value = "/search", method = RequestMethod.POST)
-    public List<LoadBalance> allLoadbalances(@RequestBody Map<String, String> params) {
-        String serviceName = params.get(params);
+    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    public List<BalancingDTO> allLoadbalances(@RequestParam String serviceName) {
         if (serviceName == null || serviceName.length() == 0) {
            //TODO throw Exception
         }
         List<Override> overrides = overrideService.findByService(serviceName);
-        List<LoadBalance> loadBalances = new ArrayList<>();
+        List<BalancingDTO> loadBalances = new ArrayList<>();
         if (overrides != null) {
             for (Override override : overrides) {
-                LoadBalance l = OverrideUtils.overrideToLoadBalance(override);
+                LoadBalance l = overrideToLoadBalance(override);
                 if (l != null) {
-                    loadBalances.add(l);
+                    BalancingDTO balancingDTO = new BalancingDTO();
+                    balancingDTO.setService(l.getService());
+                    balancingDTO.setMethodName(l.getMethod());
+                    balancingDTO.setStrategy(l.getStrategy());
+                    balancingDTO.setId(l.getId());
+                    loadBalances.add(balancingDTO);
                 }
             }
         }
@@ -89,32 +93,31 @@ public class LoadBalanceController {
     }
 
     @RequestMapping("/detail")
-    public LoadBalance detail(@RequestParam Long id) {
+    public BalancingDTO detail(@RequestParam Long id) {
         Override override =  overrideService.findById(id);
         if (override == null) {
             //TODO throw exception
         }
-        return OverrideUtils.overrideToLoadBalance(override);
+
+        LoadBalance loadBalance = OverrideUtils.overrideToLoadBalance(override);
+        BalancingDTO balancingDTO = new BalancingDTO();
+        balancingDTO.setService(loadBalance.getService());
+        balancingDTO.setMethodName(loadBalance.getMethod());
+        balancingDTO.setStrategy(loadBalance.getStrategy());
+        return balancingDTO;
     }
 
     @RequestMapping(value  = "/delete", method = RequestMethod.POST)
-    public boolean delete(@RequestBody Map<String, Long> params) {
-        Long id = params.get("id");
+    public boolean delete(@RequestBody BaseDTO baseDTO) {
+        Long id = baseDTO.getId();
         overrideService.deleteOverride(id);
         return true;
     }
 
-    private LoadBalance generateLoadbalance(Map<String, Object> yaml) {
-        LoadBalance loadBalance = new LoadBalance();
-        String methodName;
-        if (yaml.get("methodName").equals(0)) {
-            methodName = "*";
-        } else {
-            methodName = (String)yaml.get("methodName");
+    private String formatMethodName(String method) {
+        if (method.equals("0")) {
+            return "*";
         }
-        String strategy = (String)yaml.get("strategy");
-        loadBalance.setMethod(methodName);
-        loadBalance.setStrategy(strategy);
-        return loadBalance;
+        return method;
     }
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
index 2bb1c4d..610ea27 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
@@ -17,6 +17,50 @@
 
 package org.apache.dubbo.admin.controller;
 
+import org.apache.dubbo.admin.dto.OverrideDTO;
+import org.apache.dubbo.admin.governance.service.OverrideService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/override")
 public class OverridesController {
 
+    @Autowired
+    private OverrideService overrideService;
+
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    public boolean createOverride(@RequestBody OverrideDTO overrideDTO) {
+        String serviceName = overrideDTO.getService();
+        if (serviceName == null || serviceName.length() == 0) {
+            //TODO throw exception
+        }
+//        String[] mock =
+
+        return false;
+    }
+
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public boolean updateOverride(@RequestBody OverrideDTO overrideDTO) {
+        return false;
+    }
+
+    @RequestMapping(value = "/search", method = RequestMethod.POST)
+    public List<OverrideDTO> allOverride(@RequestBody Map<String, String> params) {
+        return null;
+    }
+
+    @RequestMapping("/detail")
+    public OverrideDTO detail(@RequestParam Long id) {
+       return null;
+    }
+
+    @RequestMapping(value  = "/delete", method = RequestMethod.POST)
+    public boolean delete(@RequestBody Map<String, Long> params) {
+       return false;
+    }
+
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java
index e5b1b5b..90c91f0 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java
@@ -17,6 +17,7 @@
 
 package org.apache.dubbo.admin.controller;
 
+import org.apache.dubbo.admin.dto.BaseDTO;
 import org.apache.dubbo.admin.dto.RouteDTO;
 import org.apache.dubbo.admin.governance.service.ProviderService;
 import org.apache.dubbo.admin.governance.service.RouteService;
@@ -24,8 +25,8 @@ import org.apache.dubbo.admin.registry.common.domain.Route;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 @RestController
 @RequestMapping("/api/routes")
@@ -38,7 +39,7 @@ public class RoutesController {
 
     @RequestMapping(value = "/create", method = RequestMethod.POST)
     public boolean createRule(@RequestBody RouteDTO routeDTO) {
-        String serviceName = routeDTO.getServiceName();
+        String serviceName = routeDTO.getService();
         String app = routeDTO.getApp();
         if (serviceName == null && app == null) {
 
@@ -98,10 +99,9 @@ public class RoutesController {
         return true;
     }
 
-    @RequestMapping(value = "/search", method = RequestMethod.POST)
-    public List<Route> allRoutes(@RequestBody Map<String, String> params) {
-        String app = params.get("app");
-        String serviceName = params.get("serviceName");
+    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    public List<RouteDTO> allRoutes(@RequestParam(required = false) String app,
+                                    @RequestParam(required = false) String serviceName) {
         List<Route> routes = null;
         if (app != null) {
            // app scope in 2.7
@@ -112,54 +112,64 @@ public class RoutesController {
         if (serviceName == null && app == null) {
             // TODO throw exception
         }
-        //no support for findAll and findByaddress
-        return routes;
+        List<RouteDTO> routeDTOS = new ArrayList<>();
+        for (Route route : routes) {
+            RouteDTO routeDTO = new RouteDTO();
+            routeDTO.setDynamic(route.isDynamic());
+            routeDTO.setConditions(new String[]{route.getRule()});
+            routeDTO.setEnabled(route.isEnabled());
+            routeDTO.setForce(route.isForce());
+            routeDTO.setGroup(route.getGroup());
+            routeDTO.setPriority(route.getPriority());
+            routeDTO.setRuntime(route.isRuntime());
+            routeDTO.setService(route.getService());
+            routeDTO.setId(route.getId());
+            routeDTOS.add(routeDTO);
+        }
+        //no support for findAll or findByaddress
+        return routeDTOS;
     }
 
     @RequestMapping("/detail")
-    public Route routeDetail(@RequestParam long id) {
+    public RouteDTO routeDetail(@RequestParam long id) {
         Route route = routeService.findRoute(id);
         if (route == null) {
             // TODO throw exception
         }
-        return route;
+        RouteDTO routeDTO = new RouteDTO();
+        routeDTO.setDynamic(route.isDynamic());
+        routeDTO.setConditions(new String[]{route.getRule()});
+        routeDTO.setEnabled(route.isEnabled());
+        routeDTO.setForce(route.isForce());
+        routeDTO.setGroup(route.getGroup());
+        routeDTO.setPriority(route.getPriority());
+        routeDTO.setRuntime(route.isRuntime());
+        routeDTO.setService(route.getService());
+        routeDTO.setId(route.getId());
+        return routeDTO;
     }
 
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
-    public boolean deleteRoute(@RequestBody Map<String, Long> params) {
-        Long id = params.get("id");
+    public boolean deleteRoute(@RequestBody BaseDTO baseDTO) {
+        Long id = baseDTO.getId();
         routeService.deleteRoute(id);
         return true;
     }
 
-    @RequestMapping(value = "/edit", method = RequestMethod.POST)
-    public Route editRule(@RequestBody Map<String, Long> params) {
-        Long id = params.get("id");
-        Route route = routeService.findRoute(id);
-        if (route == null) {
-            // TODO throw exception
-        }
-        return route;
-    }
-
-    @RequestMapping(value = "/changeStatus", method = RequestMethod.POST)
-    public boolean enableRoute(@RequestBody Map<String, Object> params) {
-        boolean enabled = (boolean)params.get("enabled");
+    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+    public boolean enableRoute(@RequestBody BaseDTO baseDTO) {
 
-        long id = Long.parseLong(params.get("id").toString());
-        if (enabled) {
-            routeService.disableRoute(id);
-        } else {
-            routeService.enableRoute(id);
-        }
+        Long id = baseDTO.getId();
+        routeService.enableRoute(id);
         return true;
     }
 
-    private Object getParameter(Map<String, Object> result, String key, Object defaultValue) {
-        if (result.get(key) != null) {
-            return result.get(key);
-        }
-        return defaultValue;
+    @RequestMapping(value = "/disable", method = RequestMethod.POST)
+    public boolean disableRoute(@RequestBody BaseDTO baseDTO) {
+
+        Long id = baseDTO.getId();
+        routeService.disableRoute(id);
+        return true;
     }
 
     public static void main(String[] args) {
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java
index 4c3730d..a7187c0 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java
@@ -17,20 +17,17 @@
 
 package org.apache.dubbo.admin.controller;
 
-import org.apache.dubbo.admin.domain.ServiceDO;
-import org.apache.dubbo.admin.domain.ServiceDetailDO;
 import com.alibaba.dubbo.common.Constants;
 import com.alibaba.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.admin.dto.ServiceDTO;
+import org.apache.dubbo.admin.dto.ServiceDetailDTO;
 import org.apache.dubbo.admin.governance.service.ConsumerService;
 import org.apache.dubbo.admin.governance.service.ProviderService;
 import org.apache.dubbo.admin.registry.common.domain.Consumer;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -46,23 +43,21 @@ public class ServiceController {
     @Autowired
     private ConsumerService consumerService;
 
-    @RequestMapping(value = "/search", method = RequestMethod.POST)
-    public List<ServiceDO> search(@RequestBody Map<String, String> params) {
-
-        String pattern = params.get("pattern");
-        String filter = params.get("filter");
+    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    public List<ServiceDTO> search(@RequestParam String pattern,
+                                   @RequestParam String filter) {
 
         List<Provider> allProviders = providerService.findAll();
 
-        List<ServiceDO> result = new ArrayList<>();
+        List<ServiceDTO> result = new ArrayList<>();
         if (pattern.equals("application")) {
             for (Provider provider : allProviders) {
                 Map<String, String> map = StringUtils.parseQueryString(provider.getParameters());
                 String app = map.get(Constants.APPLICATION_KEY);
                 if (app.toLowerCase().contains(filter)) {
-                    ServiceDO s = new ServiceDO();
+                    ServiceDTO s = new ServiceDTO();
                     s.setAppName(app);
-                    s.setServiceName(provider.getService());
+                    s.setService(provider.getService());
                     s.setGroup(map.get(Constants.GROUP_KEY));
                     s.setVersion(map.get(Constants.VERSION_KEY));
                     result.add(s);
@@ -74,9 +69,9 @@ public class ServiceController {
                 String service = provider.getService();
                 Map<String, String> map = StringUtils.parseQueryString(provider.getParameters());
                 if (service.toLowerCase().contains(filter.toLowerCase())) {
-                    ServiceDO s = new ServiceDO();
+                    ServiceDTO s = new ServiceDTO();
                     s.setAppName(map.get(Constants.APPLICATION_KEY));
-                    s.setServiceName(service);
+                    s.setService(service);
                     s.setGroup(map.get(Constants.GROUP_KEY));
                     s.setVersion(map.get(Constants.VERSION_KEY));
                     result.add(s);
@@ -88,9 +83,9 @@ public class ServiceController {
                 String address = provider.getAddress();
                 Map<String, String> map = StringUtils.parseQueryString(provider.getParameters());
                 if (address.contains(filter)) {
-                    ServiceDO s = new ServiceDO();
+                    ServiceDTO s = new ServiceDTO();
                     s.setAppName(map.get(Constants.APPLICATION_KEY));
-                    s.setServiceName(provider.getService());
+                    s.setService(provider.getService());
                     s.setGroup(map.get(Constants.GROUP_KEY));
                     s.setVersion(map.get(Constants.VERSION_KEY));
                     result.add(s);
@@ -102,15 +97,15 @@ public class ServiceController {
     }
 
     @RequestMapping("/detail")
-    public ServiceDetailDO serviceDetail(@RequestParam String app, @RequestParam String service) {
+    public ServiceDetailDTO serviceDetail(@RequestParam String app, @RequestParam String service) {
         List<Provider> providers = providerService.findByAppandService(app, service);
 
         List<Consumer> consumers = consumerService.findByAppandService(app, service);
 
-        ServiceDetailDO serviceDetailDO = new ServiceDetailDO();
-        serviceDetailDO.setConsumers(consumers);
-        serviceDetailDO.setProviders(providers);
-        return serviceDetailDO;
+        ServiceDetailDTO serviceDetailDTO = new ServiceDetailDTO();
+        serviceDetailDTO.setConsumers(consumers);
+        serviceDetailDTO.setProviders(providers);
+        return serviceDetailDTO;
     }
 
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/WeightController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
index 42eda14..e0fcc24 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
@@ -17,11 +17,12 @@
 
 package org.apache.dubbo.admin.controller;
 
+import org.apache.dubbo.admin.dto.BaseDTO;
+import org.apache.dubbo.admin.dto.WeightDTO;
 import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Weight;
 import org.apache.dubbo.admin.registry.common.util.OverrideUtils;
-import org.apache.dubbo.admin.dto.WeightDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -65,32 +66,43 @@ public class WeightController {
         return true;
     }
 
-    @RequestMapping(value = "/search", method = RequestMethod.POST)
-    public List<Weight> allWeight(@RequestBody Map<String, String> params) {
-        String serviceName = params.get("serviceName");
+    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    public List<WeightDTO> allWeight(@RequestParam String serviceName) {
         List<Override> overrides = overrideService.findByService(serviceName);
-        List<Weight> weights = new ArrayList<>();
+        List<WeightDTO> weightDTOS = new ArrayList<>();
         for (Override override : overrides) {
             Weight w = OverrideUtils.overrideToWeight(override);
             if (w != null) {
-                weights.add(w);
+                WeightDTO weightDTO = new WeightDTO();
+                weightDTO.setProvider(new String[]{w.getAddress()});
+                weightDTO.setService(w.getService());
+                weightDTO.setWeight(w.getWeight());
+                weightDTO.setId(w.getId());
+                weightDTOS.add(weightDTO);
             }
         }
-        return weights;
+        return weightDTOS;
     }
 
     @RequestMapping("/detail")
-    public Weight detail(@RequestParam Long id) {
+    public WeightDTO detail(@RequestParam Long id) {
         Override override = overrideService.findById(id);
         if (override != null) {
-            return OverrideUtils.overrideToWeight(override);
+
+            Weight w = OverrideUtils.overrideToWeight(override);
+            WeightDTO weightDTO = new WeightDTO();
+            weightDTO.setProvider(new String[]{w.getAddress()});
+            weightDTO.setService(w.getService());
+            weightDTO.setWeight(w.getWeight());
+            weightDTO.setId(w.getId());
+            return weightDTO;
         }
         return null;
     }
 
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
-    public boolean delete(@RequestBody Map<String, Long> params) {
-        Long id = params.get("id");
+    public boolean delete(@RequestBody BaseDTO baseDTO) {
+        Long id = baseDTO.getId();
         overrideService.deleteOverride(id);
         return true;
     }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/BalancingDTO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/BalancingDTO.java
index ead2b39..d73d348 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/BalancingDTO.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/BalancingDTO.java
@@ -17,36 +17,33 @@
 
 package org.apache.dubbo.admin.dto;
 
-/**
- * @author zmx ON 2018/9/25
- */
-public class BalancingDTO {
+public class BalancingDTO extends BaseDTO{
 
-    private Long id;
-    private String serviceName;
-    private String rule;
+    private String service;
+    private String methodName;
+    private String strategy;
 
-    public Long getId() {
-        return id;
+    public String getService() {
+        return service;
     }
 
-    public void setId(Long id) {
-        this.id = id;
+    public void setService(String service) {
+        this.service = service;
     }
 
-    public String getServiceName() {
-        return serviceName;
+    public String getMethodName() {
+        return methodName;
     }
 
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
+    public void setMethodName(String methodName) {
+        this.methodName = methodName;
     }
 
-    public String getRule() {
-        return rule;
+    public String getStrategy() {
+        return strategy;
     }
 
-    public void setRule(String rule) {
-        this.rule = rule;
+    public void setStrategy(String strategy) {
+        this.strategy = strategy;
     }
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/OverrideDTO.java
similarity index 51%
copy from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java
copy to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/OverrideDTO.java
index f8e0f29..d29936f 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/OverrideDTO.java
@@ -17,25 +17,15 @@
 
 package org.apache.dubbo.admin.dto;
 
-public class RouteDTO {
-    private Long id;
-    private String app;
-    private String serviceName;
-    private String group;
-    private boolean dynamic;
-    private int priority;
-    private boolean enabled;
-    private boolean force;
-    private boolean runtime;
-    private String[] conditions;
-
-    public Long getId() {
-        return id;
-    }
+public class OverrideDTO {
 
-    public void setId(Long id) {
-        this.id = id;
-    }
+    String app;
+    String service;
+    String address;
+    boolean dynamic;
+    boolean enabled;
+    String[] parameters;
+    String[] mock;
 
     public String getApp() {
         return app;
@@ -45,20 +35,20 @@ public class RouteDTO {
         this.app = app;
     }
 
-    public String getServiceName() {
-        return serviceName;
+    public String getService() {
+        return service;
     }
 
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
+    public void setService(String service) {
+        this.service = service;
     }
 
-    public String getGroup() {
-        return group;
+    public String getAddress() {
+        return address;
     }
 
-    public void setGroup(String group) {
-        this.group = group;
+    public void setAddress(String address) {
+        this.address = address;
     }
 
     public boolean isDynamic() {
@@ -69,14 +59,6 @@ public class RouteDTO {
         this.dynamic = dynamic;
     }
 
-    public int getPriority() {
-        return priority;
-    }
-
-    public void setPriority(int priority) {
-        this.priority = priority;
-    }
-
     public boolean isEnabled() {
         return enabled;
     }
@@ -85,27 +67,19 @@ public class RouteDTO {
         this.enabled = enabled;
     }
 
-    public boolean isForce() {
-        return force;
-    }
-
-    public void setForce(boolean force) {
-        this.force = force;
-    }
-
-    public boolean isRuntime() {
-        return runtime;
+    public String[] getParameters() {
+        return parameters;
     }
 
-    public void setRuntime(boolean runtime) {
-        this.runtime = runtime;
+    public void setParameters(String[] parameters) {
+        this.parameters = parameters;
     }
 
-    public String[] getConditions() {
-        return conditions;
+    public String[] getMock() {
+        return mock;
     }
 
-    public void setConditions(String[] conditions) {
-        this.conditions = conditions;
+    public void setMock(String[] mock) {
+        this.mock = mock;
     }
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java
index f8e0f29..10196a4 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/RouteDTO.java
@@ -17,10 +17,9 @@
 
 package org.apache.dubbo.admin.dto;
 
-public class RouteDTO {
-    private Long id;
+public class RouteDTO extends BaseDTO{
     private String app;
-    private String serviceName;
+    private String service;
     private String group;
     private boolean dynamic;
     private int priority;
@@ -29,14 +28,6 @@ public class RouteDTO {
     private boolean runtime;
     private String[] conditions;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
     public String getApp() {
         return app;
     }
@@ -45,12 +36,12 @@ public class RouteDTO {
         this.app = app;
     }
 
-    public String getServiceName() {
-        return serviceName;
+    public String getService() {
+        return service;
     }
 
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
+    public void setService(String service) {
+        this.service = service;
     }
 
     public String getGroup() {
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/ServiceDTO.java
similarity index 84%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/ServiceDTO.java
index f69f461..a510293 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/ServiceDTO.java
@@ -15,20 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.domain;
+package org.apache.dubbo.admin.dto;
 
-public class ServiceDO {
-    private String serviceName;
+public class ServiceDTO {
+    private String service;
     private String appName;
     private String group;
     private String version;
 
-    public String getServiceName() {
-        return serviceName;
+    public String getService() {
+        return service;
     }
 
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
+    public void setService(String service) {
+        this.service = service;
     }
 
     public String getAppName() {
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/ServiceDetailDTO.java
similarity index 95%
rename from dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/ServiceDetailDTO.java
index fbb6a76..757b1c5 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/ServiceDetailDTO.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.dubbo.admin.domain;
+package org.apache.dubbo.admin.dto;
 
 import org.apache.dubbo.admin.registry.common.domain.Consumer;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 
 import java.util.List;
 
-public class ServiceDetailDO {
+public class ServiceDetailDTO {
 
     List<Provider> providers;
     List<Consumer> consumers;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/WeightDTO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/WeightDTO.java
index 46b53a7..b59fe2c 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/WeightDTO.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/dto/WeightDTO.java
@@ -17,12 +17,9 @@
 
 package org.apache.dubbo.admin.dto;
 
-import java.util.List;
-
-public class WeightDTO {
+public class WeightDTO extends BaseDTO{
 
     private String service;
-    private Long id;
     private int weight;
     private String[] provider;
 
@@ -34,14 +31,6 @@ public class WeightDTO {
         this.service = service;
     }
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
     public int getWeight() {
         return weight;
     }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java
index 56959b3..127b5fa 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java
@@ -17,13 +17,13 @@
 
 package org.apache.dubbo.admin.filter;
 
+import com.alibaba.dubbo.common.logger.Logger;
+import com.alibaba.dubbo.common.logger.LoggerFactory;
+import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.governance.service.UserService;
 import org.apache.dubbo.admin.governance.util.WebConstants;
 import org.apache.dubbo.admin.registry.common.domain.User;
 import org.apache.dubbo.admin.registry.common.util.Coder;
-import com.alibaba.dubbo.common.logger.Logger;
-import com.alibaba.dubbo.common.logger.LoggerFactory;
-import com.alibaba.dubbo.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.servlet.*;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java
index 43f060f..a352778 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java
@@ -17,8 +17,8 @@
 package org.apache.dubbo.admin.governance.biz.common.i18n.impl;
 
 
-import org.apache.dubbo.admin.web.mvc.common.i18n.LocaleUtil;
 import org.apache.dubbo.admin.governance.biz.common.i18n.MessageResourceService;
+import org.apache.dubbo.admin.web.mvc.common.i18n.LocaleUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.MessageSource;
 import org.springframework.context.NoSuchMessageException;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java
index 45af685..484c203 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java
@@ -16,12 +16,12 @@
  */
 package org.apache.dubbo.admin.governance.service.impl;
 
-import org.apache.dubbo.admin.registry.common.domain.Override;
 import com.alibaba.dubbo.common.Constants;
 import com.alibaba.dubbo.common.URL;
 import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.governance.sync.util.Pair;
 import org.apache.dubbo.admin.governance.sync.util.SyncUtils;
+import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.springframework.stereotype.Component;
 
 import java.util.HashMap;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java
index dd276a7..b436726 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java
@@ -16,12 +16,12 @@
  */
 package org.apache.dubbo.admin.governance.service.impl;
 
-import org.apache.dubbo.admin.registry.common.domain.Override;
 import com.alibaba.dubbo.common.Constants;
 import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.governance.service.OwnerService;
 import org.apache.dubbo.admin.governance.service.ProviderService;
+import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Owner;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java
index 2732258..fc0dcf3 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java
@@ -16,7 +16,6 @@
  */
 package org.apache.dubbo.admin.governance.service.impl;
 
-import org.apache.dubbo.admin.registry.common.domain.Override;
 import com.alibaba.dubbo.common.Constants;
 import com.alibaba.dubbo.common.URL;
 import com.alibaba.dubbo.common.utils.StringUtils;
@@ -24,12 +23,12 @@ import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.governance.service.ProviderService;
 import org.apache.dubbo.admin.governance.sync.util.Pair;
 import org.apache.dubbo.admin.governance.sync.util.SyncUtils;
+import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 import org.apache.dubbo.admin.registry.common.route.ParseUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java
index f6941c2..b634afa 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java
@@ -16,11 +16,11 @@
  */
 package org.apache.dubbo.admin.governance.sync.util;
 
-import org.apache.dubbo.admin.registry.common.domain.Override;
 import com.alibaba.dubbo.common.Constants;
 import com.alibaba.dubbo.common.URL;
 import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.registry.common.domain.Consumer;
+import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 import org.apache.dubbo.admin.registry.common.domain.Route;
 
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java
index ecc977e..ccc95cd 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java
@@ -16,9 +16,9 @@
  */
 package org.apache.dubbo.admin.registry.common.domain;
 
-import org.apache.dubbo.admin.registry.common.registry.ConvertUtil;
 import com.alibaba.dubbo.common.Constants;
 import com.alibaba.dubbo.common.URL;
+import org.apache.dubbo.admin.registry.common.registry.ConvertUtil;
 
 import java.util.Date;
 import java.util.List;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java
index 374c67f..d229ed5 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java
@@ -16,10 +16,10 @@
  */
 package org.apache.dubbo.admin.registry.common.route;
 
+import com.alibaba.dubbo.common.Constants;
 import org.apache.dubbo.admin.registry.common.domain.Consumer;
 import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
-import com.alibaba.dubbo.common.Constants;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java
index 4575a9f..ab8f3f7 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java
@@ -16,15 +16,11 @@
  */
 package org.apache.dubbo.admin.registry.common.route;
 
-import org.apache.dubbo.admin.registry.common.domain.Route;
 import com.alibaba.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.admin.registry.common.domain.Route;
 
 import java.text.ParseException;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Collections;
+import java.util.*;
 import java.util.Map.Entry;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java
index 0ba04d3..8bab986 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java
@@ -16,10 +16,10 @@
  */
 package org.apache.dubbo.admin.registry.common.route;
 
+import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 import org.apache.dubbo.admin.registry.common.domain.Route;
-import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.web.pulltool.Tool;
 
 import java.net.URI;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java
index 288d6f0..0f9f439 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java
@@ -16,10 +16,10 @@
  */
 package org.apache.dubbo.admin.registry.common.util;
 
+import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.registry.common.domain.LoadBalance;
 import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Weight;
-import com.alibaba.dubbo.common.utils.StringUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java
index 2f96c3f..8bf7f1d 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java
@@ -1,434 +1,434 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.dubbo.admin.web.mvc.governance;
-
-import org.apache.dubbo.admin.registry.common.domain.Override;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.CollectionUtils;
-import com.alibaba.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.admin.governance.service.ConsumerService;
-import org.apache.dubbo.admin.governance.service.OverrideService;
-import org.apache.dubbo.admin.governance.service.ProviderService;
-import org.apache.dubbo.admin.web.mvc.BaseController;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.validation.support.BindingAwareModelMap;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@Controller
-@RequestMapping("/governance/overrides")
-public class OverridesController extends BaseController {
-    static final Pattern AND = Pattern.compile("\\&");
-    static final Pattern EQUAL = Pattern.compile("([^=\\s]*)\\s*=\\s*(\\S*)");
-    static final String DEFAULT_MOCK_JSON_KEY = "mock";
-    static final String MOCK_JSON_KEY_POSTFIX = ".mock";
-    static final String FORM_OVERRIDE_KEY = "overrideKey";
-    static final String FORM_OVERRIDE_VALUE = "overrideValue";
-    static final String FORM_DEFAULT_MOCK_METHOD_FORCE = "mockDefaultMethodForce";
-    static final String FORM_DEFAULT_MOCK_METHOD_JSON = "mockDefaultMethodJson";
-    static final String FORM_ORIGINAL_METHOD_FORCE_PREFIX = "mockMethodForce.";
-    static final String FORM_ORIGINAL_METHOD_PREFIX = "mockMethod.";
-    static final String FORM_DYNAMIC_METHOD_NAME_PREFIX = "mockMethodName";
-    static final String FORM_DYNAMIC_METHOD_FORCE_PREFIX = "mockMethodForce";
-    static final String FORM_DYNAMIC_METHOD_JSON_PREFIX = "mockMethodJson";
-    @Autowired
-    private OverrideService overrideService;
-
-    // FORM KEY
-    @Autowired
-    private ProviderService providerService;
-    @Autowired
-    private ConsumerService consumerService;
-
-    static Map<String, String> parseQueryString(String query) {
-        HashMap<String, String> ret = new HashMap<String, String>();
-        if (query == null || (query = query.trim()).length() == 0) return ret;
-
-        String[] kvs = AND.split(query);
-        for (String kv : kvs) {
-            Matcher matcher = EQUAL.matcher(kv);
-            if (!matcher.matches()) continue;
-            String key = matcher.group(1);
-            String value = matcher.group(2);
-            ret.put(key, value);
-        }
-
-        return ret;
-    }
-
-    @RequestMapping("")
-    public String index(HttpServletRequest request, HttpServletResponse response, Model model) {
-        prepare(request, response, model, "index", "overrides");
-        BindingAwareModelMap newModel = (BindingAwareModelMap)model;
-        String service = (String)newModel.get("service");
-        String application = (String)newModel.get("app");
-        String address = (String)newModel.get("address");
-        List<Override> overrides;
-        if (StringUtils.isNotEmpty(service)) {
-            overrides = overrideService.findByService(service);
-        } else if (StringUtils.isNotEmpty(application)) {
-            overrides = overrideService.findByApplication(application);
-        } else if (StringUtils.isNotEmpty(address)) {
-            overrides = overrideService.findByAddress(address);
-        } else {
-            overrides = overrideService.findAll();
-        }
-        model.addAttribute("overrides", overrides);
-        return "governance/screen/overrides/index";
-    }
-
-    @RequestMapping("/detail")
-    public String show(@RequestParam Long id, HttpServletRequest request, HttpServletResponse response,
-                       Model model) {
-        prepare(request, response, model, "show", "overrides");
-        Override override = overrideService.findById(id);
-
-        Map<String, String> parameters = parseQueryString(override.getParams());
-
-        if (parameters.get(DEFAULT_MOCK_JSON_KEY) != null) {
-            String mock = URL.decode(parameters.get(DEFAULT_MOCK_JSON_KEY));
-            String[] tokens = parseMock(mock);
-            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_FORCE, tokens[0]);
-            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_JSON, tokens[1]);
-            parameters.remove(DEFAULT_MOCK_JSON_KEY);
-        }
-
-        Map<String, String> method2Force = new LinkedHashMap<String, String>();
-        Map<String, String> method2Json = new LinkedHashMap<String, String>();
-
-        for (Iterator<Entry<String, String>> iterator = parameters.entrySet().iterator(); iterator.hasNext(); ) {
-            Map.Entry<String, String> e = iterator.next();
-            String key = e.getKey();
-
-            if (key.endsWith(MOCK_JSON_KEY_POSTFIX)) {
-                String m = key.substring(0, key.length() - MOCK_JSON_KEY_POSTFIX.length());
-                parseMock(m, e.getValue(), method2Force, method2Json);
-                iterator.remove();
-            }
-        }
-
-        model.addAttribute("methodForces", method2Force);
-        model.addAttribute("methodJsons", method2Json);
-        model.addAttribute("parameters", parameters);
-        model.addAttribute("override", override);
-        return "governance/screen/overrides/show";
-    }
-
-    @RequestMapping("/add")
-    public String add(HttpServletRequest request, HttpServletResponse response, Model model) {
-        prepare(request, response, model,"add", "overrides");
-        BindingAwareModelMap newModel = (BindingAwareModelMap)model;
-        String application = (String)newModel.get("app");
-        String service = (String)newModel.get("service");
-        List<String> serviceList = new ArrayList<String>();
-        List<String> applicationList = new ArrayList<String>();
-        if (StringUtils.isNotEmpty(application)) {
-            serviceList.addAll(providerService.findServicesByApplication(application));
-            serviceList.addAll(consumerService.findServicesByApplication(application));
-            model.addAttribute("serviceList", serviceList);
-        } else if (StringUtils.isNotEmpty(service)) {
-            applicationList.addAll(providerService.findApplicationsByServiceName(service));
-            applicationList.addAll(consumerService.findApplicationsByServiceName(service));
-            model.addAttribute("applicationList", applicationList);
-        } else {
-            serviceList.addAll(providerService.findServices());
-            serviceList.addAll(consumerService.findServices());
-            providerService.findServicesByApplication(application);
-            consumerService.findServicesByApplication(application);
-        }
-        model.addAttribute("serviceList", serviceList);
-
-        if (StringUtils.isNotEmpty(service) && !service.contains("*")) {
-            model.addAttribute("methods", CollectionUtils.sort(new ArrayList<String>(providerService.findMethodsByService(service))));
-        }
-        return "governance/screen/overrides/add";
-    }
-
-    @RequestMapping("/edit")
-    public String edit(@RequestParam("id") Long id, HttpServletRequest request, HttpServletResponse response,
-                     Model model) {
-        prepare(request, response, model, "edit", "overrides");
-        Override override = overrideService.findById(id);
-
-        Map<String, String> parameters = parseQueryString(override.getParams());
-
-        if (parameters.get(DEFAULT_MOCK_JSON_KEY) != null) {
-            String mock = URL.decode(parameters.get(DEFAULT_MOCK_JSON_KEY));
-            String[] tokens = parseMock(mock);
-            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_FORCE, tokens[0]);
-            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_JSON, tokens[1]);
-            parameters.remove(DEFAULT_MOCK_JSON_KEY);
-        }
-
-        Map<String, String> method2Force = new LinkedHashMap<String, String>();
-        Map<String, String> method2Json = new LinkedHashMap<String, String>();
-
-        List<String> methods = CollectionUtils.sort(new ArrayList<String>(providerService.findMethodsByService(override.getService())));
-        if (methods != null && methods.isEmpty()) {
-            for (String m : methods) {
-                parseMock(m, parameters.get(m + MOCK_JSON_KEY_POSTFIX), method2Force, method2Json);
-                parameters.remove(m + MOCK_JSON_KEY_POSTFIX);
-            }
-        }
-        for (Iterator<Entry<String, String>> iterator = parameters.entrySet().iterator(); iterator.hasNext(); ) {
-            Map.Entry<String, String> e = iterator.next();
-            String key = e.getKey();
-
-            if (key.endsWith(MOCK_JSON_KEY_POSTFIX)) {
-                String m = key.substring(0, key.length() - MOCK_JSON_KEY_POSTFIX.length());
-                parseMock(m, e.getValue(), method2Force, method2Json);
-                iterator.remove();
-            }
-        }
-
-        model.addAttribute("methods", methods);
-        model.addAttribute("methodForces", method2Force);
-        model.addAttribute("methodJsons", method2Json);
-        model.addAttribute("parameters", parameters);
-        model.addAttribute("override", override);
-        return "governance/screen/overrides/edit";
-    }
-
-    private void parseMock(String m, String mock, Map<String, String> method2Force, Map<String, String> method2Json) {
-        String[] tokens = parseMock(mock);
-        method2Force.put(m, tokens[0]);
-        method2Json.put(m, tokens[1]);
-    }
-
-    private String[] parseMock(String mock) {
-        mock = URL.decode(mock);
-        String force;
-        if (mock.startsWith("force:")) {
-            force = "force";
-            mock = mock.substring("force:".length());
-        } else if (mock.startsWith("fail:")) {
-            force = "fail";
-            mock = mock.substring("fail:".length());
-        } else {
-            force = "fail";
-        }
-        String[] tokens = new String[2];
-        tokens[0] = force;
-        tokens[1] = mock;
-        return tokens;
-    }
-
-    boolean catchParams(Override override, HttpServletRequest request, Model model) {
-        Map<String, String[]> map = request.getParameterMap();
-        String service = map.get("service")[0];
-        if (service == null || service.trim().length() == 0) {
-            model.addAttribute("message", getMessage("service is blank!"));
-            return false;
-        }
-        if (!super.currentUser.hasServicePrivilege(service)) {
-            model.addAttribute("message", getMessage("HaveNoServicePrivilege", service));
-            return false;
-        }
-
-        String defaultMockMethodForce = map.get(FORM_DEFAULT_MOCK_METHOD_FORCE)[0];
-        String defaultMockMethodJson = map.get(FORM_DEFAULT_MOCK_METHOD_JSON)[0];
-
-        Map<String, String> override2Value = new HashMap<String, String>();
-        Map<String, String> method2Json = new HashMap<String, String>();
-
-        for (Map.Entry<String, String[]> param : map.entrySet()) {
-            String key = param.getKey().trim();
-            if(param.getValue().length != 1) continue;;
-
-            String value = param.getValue()[0];
-
-            if (key.startsWith(FORM_OVERRIDE_KEY) && value != null && value.trim().length() > 0) {
-                String index = key.substring(FORM_OVERRIDE_KEY.length());
-                String overrideValue = map.get(FORM_OVERRIDE_VALUE + index)[0];
-                if (overrideValue != null && overrideValue.trim().length() > 0) {
-                    override2Value.put(value.trim(), overrideValue.trim());
-                }
-            }
-
-            if (key.startsWith(FORM_ORIGINAL_METHOD_PREFIX) && value != null && value.trim().length() > 0) {
-                String method = key.substring(FORM_ORIGINAL_METHOD_PREFIX.length());
-                String force = map.get(FORM_ORIGINAL_METHOD_FORCE_PREFIX + method)[0];
-                method2Json.put(method, force + ":" + value.trim());
-            }
-
-            if (key.startsWith(FORM_DYNAMIC_METHOD_NAME_PREFIX) && value != null && value.trim().length() > 0) {
-                String index = key.substring(FORM_DYNAMIC_METHOD_NAME_PREFIX.length());
-                String force = map.get(FORM_DYNAMIC_METHOD_FORCE_PREFIX + index)[0];
-                String json =  map.get(FORM_DYNAMIC_METHOD_JSON_PREFIX + index)[0];
-
-                if (json != null && json.trim().length() > 0) {
-                    method2Json.put(value.trim(), force + ":" + json.trim());
-                }
-            }
-        }
-
-        StringBuilder paramters = new StringBuilder();
-        boolean isFirst = true;
-        if (defaultMockMethodJson != null && defaultMockMethodJson.trim().length() > 0) {
-            paramters.append("mock=").append(URL.encode(defaultMockMethodForce + ":" + defaultMockMethodJson.trim()));
-            isFirst = false;
-        }
-        for (Map.Entry<String, String> e : method2Json.entrySet()) {
-            if (isFirst) isFirst = false;
-            else paramters.append("&");
-
-            paramters.append(e.getKey()).append(MOCK_JSON_KEY_POSTFIX).append("=").append(URL.encode(e.getValue()));
-        }
-        for (Map.Entry<String, String> e : override2Value.entrySet()) {
-            if (isFirst) isFirst = false;
-            else paramters.append("&");
-
-            paramters.append(e.getKey()).append("=").append(URL.encode(e.getValue()));
-        }
-
-        String p = paramters.toString();
-        if (p.trim().length() == 0) {
-            model.addAttribute("message", getMessage("Please enter Parameters!"));
-            return false;
-        }
-
-        override.setParams(p);
-        return true;
-    }
-
-
-    @RequestMapping("/create")
-    public String create(Override override, HttpServletRequest request,
-                         HttpServletResponse response, Model model) {
-        prepare(request,response,model,"update", "overrides");
-        boolean success = true;
-        if (!catchParams(override, request, model)) {
-            success =false;
-        } else {
-            overrideService.saveOverride(override);
-        }
-
-        model.addAttribute("success", success);
-        model.addAttribute("redirect", "../overrides");
-        return "governance/screen/redirect";
-    }
-
-    @RequestMapping("/update")
-    public String update(Override override, HttpServletRequest request,
-                         HttpServletResponse response, Model model) {
-        prepare(request, response, model, "update", "overrides");
-        boolean  succcess = true;
-        Override o = overrideService.findById(override.getId());
-        override.setService(o.getService());
-        override.setAddress(o.getAddress());
-        override.setApplication(o.getApplication());
-
-        if (!catchParams(override, request, model)) {
-            succcess = false;
-        } else {
-            overrideService.updateOverride(override);
-        }
-
-        model.addAttribute("success", succcess);
-        model.addAttribute("redirect", "../overrides");
-        return "governance/screen/redirect";
-
-    }
-
-    @RequestMapping("/delete")
-    public String delete(@RequestParam("ids") Long[] ids, HttpServletRequest request,
-                              HttpServletResponse response, Model model) {
-        prepare(request, response, model, "delete", "overrides");
-        for (Long id : ids) {
-            overrideService.deleteOverride(id);
-        }
-
-        model.addAttribute("success", true);
-        model.addAttribute("redirect", "../../overrides");
-        return "governance/screen/redirect";
-    }
-
-    @RequestMapping("/enable")
-    public String enable(@RequestParam("ids") Long[] ids, HttpServletRequest request,
-                          HttpServletResponse response, Model model) {
-        prepare(request, response, model, "enable", "overrides");
-        boolean success = true;
-        for (Long id : ids) {
-            Override override = overrideService.findById(id);
-            if (override == null) {
-                model.addAttribute("message", getMessage("NoSuchOperationData", id));
-                success = false;
-                model.addAttribute("success", success);
-                model.addAttribute("redirect", "../../overrides");
-                return "governance/screen/redirect";
-            } else {
-                if (!super.currentUser.hasServicePrivilege(override.getService())) {
-                    model.addAttribute("message", getMessage("HaveNoServicePrivilege", override.getService()));
-                    success = false;
-                    model.addAttribute("success", success);
-                    model.addAttribute("redirect", "../../overrides");
-                    return "governance/screen/redirect";
-                }
-            }
-        }
-
-        for (Long id : ids) {
-            overrideService.enableOverride(id);
-        }
-
-        model.addAttribute("success", success);
-        model.addAttribute("redirect", "../../overrides");
-        return "governance/screen/redirect";
-    }
-
-    @RequestMapping("/disable")
-    public String disable(@RequestParam("ids") Long[] ids, HttpServletRequest request,
-                           HttpServletResponse response, Model model) {
-        prepare(request, response, model, "disable", "overrides");
-        boolean success = true;
-        for (Long id : ids) {
-            Override override = overrideService.findById(id);
-            if (override == null) {
-                model.addAttribute("message", getMessage("NoSuchOperationData", id));
-                success = false;
-                model.addAttribute("success", success);
-                model.addAttribute("redirect", "../../overrides");
-                return "governance/screen/redirect";
-            } else {
-                if (!super.currentUser.hasServicePrivilege(override.getService())) {
-                    model.addAttribute("message", getMessage("HaveNoServicePrivilege", override.getService()));
-                    success = false;
-                    model.addAttribute("success", success);
-                    model.addAttribute("redirect", "../../overrides");
-                    return "governance/screen/redirect";
-                }
-            }
-        }
-
-        for (Long id : ids) {
-            overrideService.disableOverride(id);
-        }
-        model.addAttribute("success", success);
-        model.addAttribute("redirect", "../../overrides");
-        return "governance/screen/redirect";
-    }
-
-}
+///*
+// * Licensed to the Apache Software Foundation (ASF) under one or more
+// * contributor license agreements.  See the NOTICE file distributed with
+// * this work for additional information regarding copyright ownership.
+// * The ASF licenses this file to You 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 org.apache.dubbo.admin.web.mvc.governance;
+//
+//import org.apache.dubbo.admin.registry.common.domain.Override;
+//import com.alibaba.dubbo.common.URL;
+//import com.alibaba.dubbo.common.utils.CollectionUtils;
+//import com.alibaba.dubbo.common.utils.StringUtils;
+//import org.apache.dubbo.admin.governance.service.ConsumerService;
+//import org.apache.dubbo.admin.governance.service.OverrideService;
+//import org.apache.dubbo.admin.governance.service.ProviderService;
+//import org.apache.dubbo.admin.web.mvc.BaseController;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Controller;
+//import org.springframework.ui.Model;
+//import org.springframework.validation.support.BindingAwareModelMap;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestParam;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.util.*;
+//import java.util.Map.Entry;
+//import java.util.regex.Matcher;
+//import java.util.regex.Pattern;
+//
+//@Controller
+//@RequestMapping("/governance/overrides")
+//public class OverridesController extends BaseController {
+//    static final Pattern AND = Pattern.compile("\\&");
+//    static final Pattern EQUAL = Pattern.compile("([^=\\s]*)\\s*=\\s*(\\S*)");
+//    static final String DEFAULT_MOCK_JSON_KEY = "mock";
+//    static final String MOCK_JSON_KEY_POSTFIX = ".mock";
+//    static final String FORM_OVERRIDE_KEY = "overrideKey";
+//    static final String FORM_OVERRIDE_VALUE = "overrideValue";
+//    static final String FORM_DEFAULT_MOCK_METHOD_FORCE = "mockDefaultMethodForce";
+//    static final String FORM_DEFAULT_MOCK_METHOD_JSON = "mockDefaultMethodJson";
+//    static final String FORM_ORIGINAL_METHOD_FORCE_PREFIX = "mockMethodForce.";
+//    static final String FORM_ORIGINAL_METHOD_PREFIX = "mockMethod.";
+//    static final String FORM_DYNAMIC_METHOD_NAME_PREFIX = "mockMethodName";
+//    static final String FORM_DYNAMIC_METHOD_FORCE_PREFIX = "mockMethodForce";
+//    static final String FORM_DYNAMIC_METHOD_JSON_PREFIX = "mockMethodJson";
+//    @Autowired
+//    private OverrideService overrideService;
+//
+//    // FORM KEY
+//    @Autowired
+//    private ProviderService providerService;
+//    @Autowired
+//    private ConsumerService consumerService;
+//
+//    static Map<String, String> parseQueryString(String query) {
+//        HashMap<String, String> ret = new HashMap<String, String>();
+//        if (query == null || (query = query.trim()).length() == 0) return ret;
+//
+//        String[] kvs = AND.split(query);
+//        for (String kv : kvs) {
+//            Matcher matcher = EQUAL.matcher(kv);
+//            if (!matcher.matches()) continue;
+//            String key = matcher.group(1);
+//            String value = matcher.group(2);
+//            ret.put(key, value);
+//        }
+//
+//        return ret;
+//    }
+//
+//    @RequestMapping("")
+//    public String index(HttpServletRequest request, HttpServletResponse response, Model model) {
+//        prepare(request, response, model, "index", "overrides");
+//        BindingAwareModelMap newModel = (BindingAwareModelMap)model;
+//        String service = (String)newModel.get("service");
+//        String application = (String)newModel.get("app");
+//        String address = (String)newModel.get("address");
+//        List<Override> overrides;
+//        if (StringUtils.isNotEmpty(service)) {
+//            overrides = overrideService.findByService(service);
+//        } else if (StringUtils.isNotEmpty(application)) {
+//            overrides = overrideService.findByApplication(application);
+//        } else if (StringUtils.isNotEmpty(address)) {
+//            overrides = overrideService.findByAddress(address);
+//        } else {
+//            overrides = overrideService.findAll();
+//        }
+//        model.addAttribute("overrides", overrides);
+//        return "governance/screen/overrides/index";
+//    }
+//
+//    @RequestMapping("/detail")
+//    public String show(@RequestParam Long id, HttpServletRequest request, HttpServletResponse response,
+//                       Model model) {
+//        prepare(request, response, model, "show", "overrides");
+//        Override override = overrideService.findById(id);
+//
+//        Map<String, String> parameters = parseQueryString(override.getParams());
+//
+//        if (parameters.get(DEFAULT_MOCK_JSON_KEY) != null) {
+//            String mock = URL.decode(parameters.get(DEFAULT_MOCK_JSON_KEY));
+//            String[] tokens = parseMock(mock);
+//            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_FORCE, tokens[0]);
+//            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_JSON, tokens[1]);
+//            parameters.remove(DEFAULT_MOCK_JSON_KEY);
+//        }
+//
+//        Map<String, String> method2Force = new LinkedHashMap<String, String>();
+//        Map<String, String> method2Json = new LinkedHashMap<String, String>();
+//
+//        for (Iterator<Entry<String, String>> iterator = parameters.entrySet().iterator(); iterator.hasNext(); ) {
+//            Map.Entry<String, String> e = iterator.next();
+//            String key = e.getKey();
+//
+//            if (key.endsWith(MOCK_JSON_KEY_POSTFIX)) {
+//                String m = key.substring(0, key.length() - MOCK_JSON_KEY_POSTFIX.length());
+//                parseMock(m, e.getValue(), method2Force, method2Json);
+//                iterator.remove();
+//            }
+//        }
+//
+//        model.addAttribute("methodForces", method2Force);
+//        model.addAttribute("methodJsons", method2Json);
+//        model.addAttribute("parameters", parameters);
+//        model.addAttribute("override", override);
+//        return "governance/screen/overrides/show";
+//    }
+//
+//    @RequestMapping("/add")
+//    public String add(HttpServletRequest request, HttpServletResponse response, Model model) {
+//        prepare(request, response, model,"add", "overrides");
+//        BindingAwareModelMap newModel = (BindingAwareModelMap)model;
+//        String application = (String)newModel.get("app");
+//        String service = (String)newModel.get("service");
+//        List<String> serviceList = new ArrayList<String>();
+//        List<String> applicationList = new ArrayList<String>();
+//        if (StringUtils.isNotEmpty(application)) {
+//            serviceList.addAll(providerService.findServicesByApplication(application));
+//            serviceList.addAll(consumerService.findServicesByApplication(application));
+//            model.addAttribute("serviceList", serviceList);
+//        } else if (StringUtils.isNotEmpty(service)) {
+//            applicationList.addAll(providerService.findApplicationsByServiceName(service));
+//            applicationList.addAll(consumerService.findApplicationsByServiceName(service));
+//            model.addAttribute("applicationList", applicationList);
+//        } else {
+//            serviceList.addAll(providerService.findServices());
+//            serviceList.addAll(consumerService.findServices());
+//            providerService.findServicesByApplication(application);
+//            consumerService.findServicesByApplication(application);
+//        }
+//        model.addAttribute("serviceList", serviceList);
+//
+//        if (StringUtils.isNotEmpty(service) && !service.contains("*")) {
+//            model.addAttribute("methods", CollectionUtils.sort(new ArrayList<String>(providerService.findMethodsByService(service))));
+//        }
+//        return "governance/screen/overrides/add";
+//    }
+//
+//    @RequestMapping("/edit")
+//    public String edit(@RequestParam("id") Long id, HttpServletRequest request, HttpServletResponse response,
+//                     Model model) {
+//        prepare(request, response, model, "edit", "overrides");
+//        Override override = overrideService.findById(id);
+//
+//        Map<String, String> parameters = parseQueryString(override.getParams());
+//
+//        if (parameters.get(DEFAULT_MOCK_JSON_KEY) != null) {
+//            String mock = URL.decode(parameters.get(DEFAULT_MOCK_JSON_KEY));
+//            String[] tokens = parseMock(mock);
+//            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_FORCE, tokens[0]);
+//            model.addAttribute(FORM_DEFAULT_MOCK_METHOD_JSON, tokens[1]);
+//            parameters.remove(DEFAULT_MOCK_JSON_KEY);
+//        }
+//
+//        Map<String, String> method2Force = new LinkedHashMap<String, String>();
+//        Map<String, String> method2Json = new LinkedHashMap<String, String>();
+//
+//        List<String> methods = CollectionUtils.sort(new ArrayList<String>(providerService.findMethodsByService(override.getService())));
+//        if (methods != null && methods.isEmpty()) {
+//            for (String m : methods) {
+//                parseMock(m, parameters.get(m + MOCK_JSON_KEY_POSTFIX), method2Force, method2Json);
+//                parameters.remove(m + MOCK_JSON_KEY_POSTFIX);
+//            }
+//        }
+//        for (Iterator<Entry<String, String>> iterator = parameters.entrySet().iterator(); iterator.hasNext(); ) {
+//            Map.Entry<String, String> e = iterator.next();
+//            String key = e.getKey();
+//
+//            if (key.endsWith(MOCK_JSON_KEY_POSTFIX)) {
+//                String m = key.substring(0, key.length() - MOCK_JSON_KEY_POSTFIX.length());
+//                parseMock(m, e.getValue(), method2Force, method2Json);
+//                iterator.remove();
+//            }
+//        }
+//
+//        model.addAttribute("methods", methods);
+//        model.addAttribute("methodForces", method2Force);
+//        model.addAttribute("methodJsons", method2Json);
+//        model.addAttribute("parameters", parameters);
+//        model.addAttribute("override", override);
+//        return "governance/screen/overrides/edit";
+//    }
+//
+//    private void parseMock(String m, String mock, Map<String, String> method2Force, Map<String, String> method2Json) {
+//        String[] tokens = parseMock(mock);
+//        method2Force.put(m, tokens[0]);
+//        method2Json.put(m, tokens[1]);
+//    }
+//
+//    private String[] parseMock(String mock) {
+//        mock = URL.decode(mock);
+//        String force;
+//        if (mock.startsWith("force:")) {
+//            force = "force";
+//            mock = mock.substring("force:".length());
+//        } else if (mock.startsWith("fail:")) {
+//            force = "fail";
+//            mock = mock.substring("fail:".length());
+//        } else {
+//            force = "fail";
+//        }
+//        String[] tokens = new String[2];
+//        tokens[0] = force;
+//        tokens[1] = mock;
+//        return tokens;
+//    }
+//
+//    boolean catchParams(Override override, HttpServletRequest request, Model model) {
+//        Map<String, String[]> map = request.getParameterMap();
+//        String service = map.get("service")[0];
+//        if (service == null || service.trim().length() == 0) {
+//            model.addAttribute("message", getMessage("service is blank!"));
+//            return false;
+//        }
+//        if (!super.currentUser.hasServicePrivilege(service)) {
+//            model.addAttribute("message", getMessage("HaveNoServicePrivilege", service));
+//            return false;
+//        }
+//
+//        String defaultMockMethodForce = map.get(FORM_DEFAULT_MOCK_METHOD_FORCE)[0];
+//        String defaultMockMethodJson = map.get(FORM_DEFAULT_MOCK_METHOD_JSON)[0];
+//
+//        Map<String, String> override2Value = new HashMap<String, String>();
+//        Map<String, String> method2Json = new HashMap<String, String>();
+//
+//        for (Map.Entry<String, String[]> param : map.entrySet()) {
+//            String key = param.getKey().trim();
+//            if(param.getValue().length != 1) continue;;
+//
+//            String value = param.getValue()[0];
+//
+//            if (key.startsWith(FORM_OVERRIDE_KEY) && value != null && value.trim().length() > 0) {
+//                String index = key.substring(FORM_OVERRIDE_KEY.length());
+//                String overrideValue = map.get(FORM_OVERRIDE_VALUE + index)[0];
+//                if (overrideValue != null && overrideValue.trim().length() > 0) {
+//                    override2Value.put(value.trim(), overrideValue.trim());
+//                }
+//            }
+//
+//            if (key.startsWith(FORM_ORIGINAL_METHOD_PREFIX) && value != null && value.trim().length() > 0) {
+//                String method = key.substring(FORM_ORIGINAL_METHOD_PREFIX.length());
+//                String force = map.get(FORM_ORIGINAL_METHOD_FORCE_PREFIX + method)[0];
+//                method2Json.put(method, force + ":" + value.trim());
+//            }
+//
+//            if (key.startsWith(FORM_DYNAMIC_METHOD_NAME_PREFIX) && value != null && value.trim().length() > 0) {
+//                String index = key.substring(FORM_DYNAMIC_METHOD_NAME_PREFIX.length());
+//                String force = map.get(FORM_DYNAMIC_METHOD_FORCE_PREFIX + index)[0];
+//                String json =  map.get(FORM_DYNAMIC_METHOD_JSON_PREFIX + index)[0];
+//
+//                if (json != null && json.trim().length() > 0) {
+//                    method2Json.put(value.trim(), force + ":" + json.trim());
+//                }
+//            }
+//        }
+//
+//        StringBuilder paramters = new StringBuilder();
+//        boolean isFirst = true;
+//        if (defaultMockMethodJson != null && defaultMockMethodJson.trim().length() > 0) {
+//            paramters.append("mock=").append(URL.encode(defaultMockMethodForce + ":" + defaultMockMethodJson.trim()));
+//            isFirst = false;
+//        }
+//        for (Map.Entry<String, String> e : method2Json.entrySet()) {
+//            if (isFirst) isFirst = false;
+//            else paramters.append("&");
+//
+//            paramters.append(e.getKey()).append(MOCK_JSON_KEY_POSTFIX).append("=").append(URL.encode(e.getValue()));
+//        }
+//        for (Map.Entry<String, String> e : override2Value.entrySet()) {
+//            if (isFirst) isFirst = false;
+//            else paramters.append("&");
+//
+//            paramters.append(e.getKey()).append("=").append(URL.encode(e.getValue()));
+//        }
+//
+//        String p = paramters.toString();
+//        if (p.trim().length() == 0) {
+//            model.addAttribute("message", getMessage("Please enter Parameters!"));
+//            return false;
+//        }
+//
+//        override.setParams(p);
+//        return true;
+//    }
+//
+//
+//    @RequestMapping("/create")
+//    public String create(Override override, HttpServletRequest request,
+//                         HttpServletResponse response, Model model) {
+//        prepare(request,response,model,"update", "overrides");
+//        boolean success = true;
+//        if (!catchParams(override, request, model)) {
+//            success =false;
+//        } else {
+//            overrideService.saveOverride(override);
+//        }
+//
+//        model.addAttribute("success", success);
+//        model.addAttribute("redirect", "../overrides");
+//        return "governance/screen/redirect";
+//    }
+//
+//    @RequestMapping("/update")
+//    public String update(Override override, HttpServletRequest request,
+//                         HttpServletResponse response, Model model) {
+//        prepare(request, response, model, "update", "overrides");
+//        boolean  succcess = true;
+//        Override o = overrideService.findById(override.getId());
+//        override.setService(o.getService());
+//        override.setAddress(o.getAddress());
+//        override.setApplication(o.getApplication());
+//
+//        if (!catchParams(override, request, model)) {
+//            succcess = false;
+//        } else {
+//            overrideService.updateOverride(override);
+//        }
+//
+//        model.addAttribute("success", succcess);
+//        model.addAttribute("redirect", "../overrides");
+//        return "governance/screen/redirect";
+//
+//    }
+//
+//    @RequestMapping("/delete")
+//    public String delete(@RequestParam("ids") Long[] ids, HttpServletRequest request,
+//                              HttpServletResponse response, Model model) {
+//        prepare(request, response, model, "delete", "overrides");
+//        for (Long id : ids) {
+//            overrideService.deleteOverride(id);
+//        }
+//
+//        model.addAttribute("success", true);
+//        model.addAttribute("redirect", "../../overrides");
+//        return "governance/screen/redirect";
+//    }
+//
+//    @RequestMapping("/enable")
+//    public String enable(@RequestParam("ids") Long[] ids, HttpServletRequest request,
+//                          HttpServletResponse response, Model model) {
+//        prepare(request, response, model, "enable", "overrides");
+//        boolean success = true;
+//        for (Long id : ids) {
+//            Override override = overrideService.findById(id);
+//            if (override == null) {
+//                model.addAttribute("message", getMessage("NoSuchOperationData", id));
+//                success = false;
+//                model.addAttribute("success", success);
+//                model.addAttribute("redirect", "../../overrides");
+//                return "governance/screen/redirect";
+//            } else {
+//                if (!super.currentUser.hasServicePrivilege(override.getService())) {
+//                    model.addAttribute("message", getMessage("HaveNoServicePrivilege", override.getService()));
+//                    success = false;
+//                    model.addAttribute("success", success);
+//                    model.addAttribute("redirect", "../../overrides");
+//                    return "governance/screen/redirect";
+//                }
+//            }
+//        }
+//
+//        for (Long id : ids) {
+//            overrideService.enableOverride(id);
+//        }
+//
+//        model.addAttribute("success", success);
+//        model.addAttribute("redirect", "../../overrides");
+//        return "governance/screen/redirect";
+//    }
+//
+//    @RequestMapping("/disable")
+//    public String disable(@RequestParam("ids") Long[] ids, HttpServletRequest request,
+//                           HttpServletResponse response, Model model) {
+//        prepare(request, response, model, "disable", "overrides");
+//        boolean success = true;
+//        for (Long id : ids) {
+//            Override override = overrideService.findById(id);
+//            if (override == null) {
+//                model.addAttribute("message", getMessage("NoSuchOperationData", id));
+//                success = false;
+//                model.addAttribute("success", success);
+//                model.addAttribute("redirect", "../../overrides");
+//                return "governance/screen/redirect";
+//            } else {
+//                if (!super.currentUser.hasServicePrivilege(override.getService())) {
+//                    model.addAttribute("message", getMessage("HaveNoServicePrivilege", override.getService()));
+//                    success = false;
+//                    model.addAttribute("success", success);
+//                    model.addAttribute("redirect", "../../overrides");
+//                    return "governance/screen/redirect";
+//                }
+//            }
+//        }
+//
+//        for (Long id : ids) {
+//            overrideService.disableOverride(id);
+//        }
+//        model.addAttribute("success", success);
+//        model.addAttribute("redirect", "../../overrides");
+//        return "governance/screen/redirect";
+//    }
+//
+//}
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java
index 373ff48..768ce91 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java
@@ -17,7 +17,6 @@
 
 package org.apache.dubbo.admin.web.mvc.governance;
 
-import org.apache.dubbo.admin.registry.common.domain.Override;
 import com.alibaba.dubbo.common.URL;
 import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.governance.service.ConsumerService;
@@ -25,6 +24,7 @@ import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.governance.service.ProviderService;
 import org.apache.dubbo.admin.governance.service.RouteService;
 import org.apache.dubbo.admin.registry.common.domain.Consumer;
+import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.domain.Provider;
 import org.apache.dubbo.admin.registry.common.domain.Route;
 import org.apache.dubbo.admin.registry.common.route.OverrideUtils;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java
index 755d86f..8988d51 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java
@@ -16,12 +16,12 @@
  */
 package org.apache.dubbo.admin.web.mvc.governance;
 
-import org.apache.dubbo.admin.registry.common.domain.Override;
 import com.alibaba.dubbo.common.URL;
 import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.governance.service.ConsumerService;
 import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.governance.service.ProviderService;
+import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.route.OverrideUtils;
 import org.apache.dubbo.admin.web.mvc.BaseController;
 import org.apache.dubbo.admin.web.pulltool.Tool;
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java
index 0678476..bbf9450 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java
@@ -16,6 +16,10 @@
  */
 package org.apache.dubbo.admin.web.pulltool;
 
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.common.utils.NetUtils;
+import com.alibaba.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.admin.governance.service.OverrideService;
 import org.apache.dubbo.admin.governance.service.RouteService;
 import org.apache.dubbo.admin.registry.common.domain.*;
@@ -23,10 +27,6 @@ import org.apache.dubbo.admin.registry.common.domain.Override;
 import org.apache.dubbo.admin.registry.common.route.ParseUtils;
 import org.apache.dubbo.admin.registry.common.route.RouteRule;
 import org.apache.dubbo.admin.registry.common.util.StringEscapeUtils;
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
diff --git a/dubbo-admin-frontend/src/components/AccessControl.vue b/dubbo-admin-frontend/src/components/AccessControl.vue
index 42fb311..73d9063 100644
--- a/dubbo-admin-frontend/src/components/AccessControl.vue
+++ b/dubbo-admin-frontend/src/components/AccessControl.vue
@@ -240,6 +240,7 @@ export default {
     },
     createItem () {
       let doc = yaml.load(this.modal.content)
+      this.filter = this.modal.service
       AXIOS.post('/access/create', {
         service: this.modal.service,
         whitelist: doc.whitelist,
diff --git a/dubbo-admin-frontend/src/components/LoadBalance.vue b/dubbo-admin-frontend/src/components/LoadBalance.vue
index 9b27fff..ac791b2 100644
--- a/dubbo-admin-frontend/src/components/LoadBalance.vue
+++ b/dubbo-admin-frontend/src/components/LoadBalance.vue
@@ -53,7 +53,7 @@
           >
             <template slot="items" slot-scope="props">
               <td class="text-xs-left">{{ props.item.service }}</td>
-              <td class="text-xs-left">{{ props.item.method }}</td>
+              <td class="text-xs-left">{{ props.item.methodName }}</td>
               <td class="justify-center px-0">
                 <v-tooltip bottom v-for="op in operations" :key="op.id">
                   <v-icon small class="mr-2" slot="activator" @click="itemOperation(op.icon(props.item), props.item)">
@@ -196,25 +196,14 @@
         this.search(this.filter, true)
       },
       search: function (filter, rewrite) {
-        let params = {}
-        params.serviceName = filter
-        AXIOS.post('/balancing/search', params)
+        AXIOS.get('/balancing/search?service=' + filter)
           .then(response => {
             this.loadBalances = response.data
             if (rewrite) {
-              this.$router.push({path: 'loadbalance', query: {serviceName: filter}})
+              this.$router.push({path: 'loadbalance', query: {service: filter}})
             }
           })
       },
-      handleRule: function (route) {
-        let result = {}
-        for (let property in route) {
-          if (this.ruleKeys.includes(property)) {
-            result[property] = route[property]
-          }
-        }
-        return yaml.safeDump(result)
-      },
       closeDialog: function () {
         this.ruleText = this.template
         this.service = ''
@@ -235,15 +224,15 @@
         this.warn = false
       },
       saveItem: function () {
-        let text = encodeURIComponent(this.ruleText)  // contains illegal url character, need encode
-        let rule = {}
-        rule.serviceName = this.service
-        rule.rule = text
-        AXIOS.post('/balancing/create', rule)
+        let balancing = yaml.safeLoad(this.ruleText)
+        balancing.service = this.service
+        AXIOS.post('/balancing/create', balancing)
           .then(response => {
             if (response.data) {
               this.search(this.service, true)
+              this.filter = this.service
             }
+            this.closeDialog()
           })
       },
       itemOperation: function (icon, item) {
@@ -252,28 +241,26 @@
             AXIOS.get('/balancing/detail?id=' + item.id)
               .then(response => {
                 let balancing = response.data
-                let result = this.handleRule(balancing)
                 this.service = balancing.service
-                this.ruleText = result
+                delete balancing.service
+                this.ruleText = yaml.safeDump(balancing)
                 this.cmOption.readOnly = true
                 this.dialog = true
               })
             break
           case 'edit':
-            let edit = {}
-            edit.id = item.id
-            AXIOS.post('/balancing/edit', edit)
+            AXIOS.get('/balancing/detail?id=' + item.id)
               .then(response => {
-                let loadbalance = response.data
-                let result = this.handleRule(loadbalance)
-                this.service = loadbalance.service
-                this.ruleText = result
+                let balancing = response.data
+                this.service = balancing.service
+                delete balancing.service
+                this.ruleText = yaml.safeDump(balancing)
                 this.cmOption.readOnly = false
                 this.dialog = true
               })
             break
           case 'delete':
-            this.openWarn(' Are you sure to Delete Routing Rule', 'serviceName: ' + item.service)
+            this.openWarn(' Are you sure to Delete Routing Rule', 'service: ' + item.service)
             this.warnStatus.operation = 'delete'
             this.warnStatus.id = item.id
         }
@@ -282,24 +269,13 @@
         this.height = window.innerHeight * 0.5
       },
       deleteItem: function (warnStatus) {
-        if (warnStatus.operation === 'delete') {
-          let id = {}
-          id.id = warnStatus.id
-          AXIOS.post('/balancing/delete', id)
-            .then(response => {
-              this.warn = false
-              this.search(this.filter, false)
-            })
-        } else if (warnStatus.operation === 'block') {
-          let status = {}
-          status.enabled = warnStatus.enabled
-          status.id = warnStatus.id
-          AXIOS.post('/routes/changeStatus', status)
-            .then(response => {
-              this.warn = false
-              this.search(this.filter, false)
-            })
-        }
+        let id = {}
+        id.id = warnStatus.id
+        AXIOS.post('/balancing/delete', id)
+          .then(response => {
+            this.warn = false
+            this.search(this.filter, false)
+          })
       }
     },
     computed: {
@@ -315,7 +291,7 @@
       let query = this.$route.query
       let service = ''
       Object.keys(query).forEach(function (key) {
-        if (key === 'serviceName') {
+        if (key === 'service') {
           service = query[key]
         }
       })
diff --git a/dubbo-admin-frontend/src/components/Overrides.vue b/dubbo-admin-frontend/src/components/Overrides.vue
index 4ad1295..5fe89ca 100644
--- a/dubbo-admin-frontend/src/components/Overrides.vue
+++ b/dubbo-admin-frontend/src/components/Overrides.vue
@@ -206,12 +206,12 @@
       },
       search: function (filter, rewrite) {
         let params = {}
-        params.serviceName = filter
+        params.service = filter
         AXIOS.post('/balancing/search', params)
           .then(response => {
             this.loadBalances = response.data
             if (rewrite) {
-              this.$router.push({path: 'loadbalance', query: {serviceName: filter}})
+              this.$router.push({path: 'loadbalance', query: {service: filter}})
             }
           })
       },
@@ -246,7 +246,7 @@
       saveItem: function () {
         let text = encodeURIComponent(this.ruleText)  // contains illegal url character, need encode
         let rule = {}
-        rule.serviceName = this.service
+        rule.service = this.service
         rule.rule = text
         AXIOS.post('/balancing/create', rule)
           .then(response => {
@@ -282,7 +282,7 @@
               })
             break
           case 'delete':
-            this.openWarn(' Are you sure to Delete Routing Rule', 'serviceName: ' + item.service)
+            this.openWarn(' Are you sure to Delete Routing Rule', 'service: ' + item.service)
             this.warnStatus.operation = 'delete'
             this.warnStatus.id = item.id
         }
@@ -324,7 +324,7 @@
       let query = this.$route.query
       let service = ''
       Object.keys(query).forEach(function (key) {
-        if (key === 'serviceName') {
+        if (key === 'service') {
           service = query[key]
         }
       })
diff --git a/dubbo-admin-frontend/src/components/RoutingRule.vue b/dubbo-admin-frontend/src/components/RoutingRule.vue
index d535563..6bcba1c 100644
--- a/dubbo-admin-frontend/src/components/RoutingRule.vue
+++ b/dubbo-admin-frontend/src/components/RoutingRule.vue
@@ -238,37 +238,14 @@
         this.search(this.filter, true)
       },
       search: function (filter, rewrite) {
-        let params = {}
-        params.serviceName = filter
-
-        AXIOS.post('/routes/search', params)
+        AXIOS.get('/routes/search?serviceName=' + filter)
           .then(response => {
             this.routingRules = response.data
             if (rewrite) {
-              this.$router.push({path: 'routingRule', query: {serviceName: filter}})
+              this.$router.push({path: 'routingRule', query: {service: filter}})
             }
           })
       },
-      handleRule: function (route) {
-        console.log(route)
-        let result = {}
-        let conditions = []
-        for (let property in route) {
-          if (this.ruleKeys.includes(property)) {
-            if (property === 'rule') {
-              conditions.push(route[property])
-            } else {
-              result[property] = route[property]
-            }
-          }
-        }
-        if (conditions.length > 0) {
-          result['conditions'] = conditions
-        }
-        console.log('result====')
-        console.log(result)
-        return yaml.safeDump(result)
-      },
       closeDialog: function () {
         this.ruleText = this.template
         this.updateId = -1
@@ -291,7 +268,7 @@
       },
       saveItem: function () {
         let rule = yaml.safeLoad(this.ruleText)
-        rule.serviceName = this.service
+        rule.service = this.service
         if (this.updateId !== -1) {
           rule.id = this.updateId
           AXIOS.post('/routes/update', rule)
@@ -306,6 +283,7 @@
             .then(response => {
               if (response.data) {
                 this.search(this.service, true)
+                this.filter = this.service
               }
               this.closeDialog()
             })
@@ -317,9 +295,9 @@
             AXIOS.get('/routes/detail?id=' + item.id)
               .then(response => {
                 let route = response.data
-                let result = this.handleRule(route)
                 this.service = route.service
-                this.ruleText = result
+                delete route.service
+                this.ruleText = yaml.safeDump(route)
                 this.cmOption.readOnly = true
                 this.dialog = true
               })
@@ -327,26 +305,29 @@
           case 'edit':
             let id = {}
             id.id = item.id
-            AXIOS.post('/routes/edit', id)
+            AXIOS.get('/routes/detail?id=' + item.id)
               .then(response => {
                 let route = response.data
-                let result = this.handleRule(route)
                 this.service = route.service
-                this.ruleText = result
+                delete route.service
+                this.ruleText = yaml.safeDump(route)
                 this.cmOption.readOnly = false
                 this.dialog = true
                 this.updateId = item.id
               })
             break
           case 'block':
+            this.openWarn(' Are you sure to block Routing Rule', 'service: ' + item.service)
+            this.warnStatus.operation = 'disable'
+            this.warnStatus.id = item.id
+            break
           case 'check_circle_outline':
-            this.openWarn(' Are you sure to ' + icon + ' Routing Rule', 'serviceName: ' + item.service)
-            this.warnStatus.operation = 'block'
+            this.openWarn(' Are you sure to enable Routing Rule', 'service: ' + item.service)
+            this.warnStatus.operation = 'enable'
             this.warnStatus.id = item.id
-            this.warnStatus.enabled = item.enabled
             break
           case 'delete':
-            this.openWarn(' Are you sure to Delete Routing Rule', 'serviceName: ' + item.service)
+            this.openWarn(' Are you sure to Delete Routing Rule', 'service: ' + item.service)
             this.warnStatus.operation = 'delete'
             this.warnStatus.id = item.id
         }
@@ -363,11 +344,18 @@
               this.warn = false
               this.search(this.filter, false)
             })
-        } else if (warnStatus.operation === 'block') {
-          let status = {}
-          status.id = warnStatus.id
-          status.enabled = warnStatus.enabled
-          AXIOS.post('/routes/changeStatus', status)
+        } else if (warnStatus.operation === 'disable') {
+          let id = {}
+          id.id = warnStatus.id
+          AXIOS.post('/routes/disable', id)
+            .then(response => {
+              this.warn = false
+              this.search(this.filter, false)
+            })
+        } else if (warnStatus.operation === 'enable') {
+          let id = {}
+          id.id = warnStatus.id
+          AXIOS.post('/routes/enable', id)
             .then(response => {
               this.warn = false
               this.search(this.filter, false)
@@ -388,7 +376,7 @@
       let query = this.$route.query
       let service = ''
       Object.keys(query).forEach(function (key) {
-        if (key === 'serviceName') {
+        if (key === 'service') {
           service = query[key]
         }
       })
diff --git a/dubbo-admin-frontend/src/components/ServiceSearch.vue b/dubbo-admin-frontend/src/components/ServiceSearch.vue
index a407e74..24e4754 100644
--- a/dubbo-admin-frontend/src/components/ServiceSearch.vue
+++ b/dubbo-admin-frontend/src/components/ServiceSearch.vue
@@ -72,10 +72,10 @@
             :items="services"
           >
             <template slot="items" slot-scope="props">
-              <td>{{props.item.serviceName}}</td>
+              <td>{{props.item.service}}</td>
               <td>{{props.item.group}}</td>
               <td>{{props.item.appName}}</td>
-              <td><v-btn small color='primary' :href='getHref(props.item.serviceName, props.item.appName)'>Detail</v-btn></td>
+              <td><v-btn small color='primary' :href='getHref(props.item.service, props.item.appName)'>Detail</v-btn></td>
             </template>
           </v-data-table>
         </template>
diff --git a/dubbo-admin-frontend/src/components/WeightAdjust.vue b/dubbo-admin-frontend/src/components/WeightAdjust.vue
index 4cfa632..93167f7 100644
--- a/dubbo-admin-frontend/src/components/WeightAdjust.vue
+++ b/dubbo-admin-frontend/src/components/WeightAdjust.vue
@@ -198,33 +198,14 @@
         this.search(this.filter, true)
       },
       search: function (filter, rewrite) {
-        let params = {}
-        params.serviceName = filter
-        AXIOS.post('/weight/search', params)
+        AXIOS.get('/weight/search?serviceName=' + filter)
             .then(response => {
               this.loadBalances = response.data
               if (rewrite) {
-                this.$router.push({path: 'weight', query: {serviceName: filter}})
+                this.$router.push({path: 'weight', query: {service: filter}})
               }
             })
       },
-      handleRule: function (weight) {
-        let result = {}
-        let provider = []
-        for (let property in weight) {
-          if (this.ruleKeys.includes(property)) {
-            if (property === 'address') {
-              provider.push(weight[property])
-            } else {
-              result[property] = weight[property]
-            }
-          }
-        }
-        if (provider.length > 0) {
-          result['provider'] = provider
-        }
-        return yaml.safeDump(result)
-      },
       closeDialog: function () {
         this.ruleText = this.template
         this.service = ''
@@ -250,6 +231,7 @@
         AXIOS.post('/weight/create', weight)
           .then(response => {
             this.search(this.service, true)
+            this.filter = this.service
             this.closeDialog()
           })
       },
@@ -259,28 +241,26 @@
             AXIOS.get('/weight/detail?id=' + item.id)
                 .then(response => {
                   let weight = response.data
-                  let result = this.handleRule(weight)
                   this.service = weight.service
-                  this.ruleText = result
+                  delete weight.service
+                  this.ruleText = yaml.safeDump(weight)
                   this.cmOption.readOnly = true
                   this.dialog = true
                 })
             break
           case 'edit':
-            let id = {}
-            id.id = item.id
-            AXIOS.post('/weight/edit' + id)
+            AXIOS.get('/weight/detail?id=' + item.id)
                 .then(response => {
                   let weight = response.data
-                  let result = this.handleRule(weight)
                   this.service = weight.service
-                  this.ruleText = result
+                  delete weight.service
+                  this.ruleText = yaml.safeDump(weight)
                   this.cmOption.readOnly = false
                   this.dialog = true
                 })
             break
           case 'delete':
-            this.openWarn(' Are you sure to Delete Routing Rule', 'serviceName: ' + item.service)
+            this.openWarn(' Are you sure to Delete Routing Rule', 'service: ' + item.service)
             this.warnStatus.operation = 'delete'
             this.warnStatus.id = item.id
         }
@@ -289,24 +269,13 @@
         this.height = window.innerHeight * 0.5
       },
       deleteItem: function (warnStatus) {
-        if (warnStatus.operation === 'delete') {
-          let id = {}
-          id.id = warnStatus.id
-          AXIOS.post('/weight/delete', id)
-              .then(response => {
-                this.warn = false
-                this.search(this.filter, false)
-              })
-        } else if (warnStatus.operation === 'block') {
-          let status = {}
-          status.enabled = warnStatus.enabled
-          status.id = warnStatus.id
-          AXIOS.post('/weight/changeStatus', status)
-              .then(response => {
-                this.warn = false
-                this.search(this.filter, false)
-              })
-        }
+        let id = {}
+        id.id = warnStatus.id
+        AXIOS.post('/weight/delete', id)
+          .then(response => {
+            this.warn = false
+            this.search(this.filter, false)
+          })
       }
     },
     computed: {
@@ -322,7 +291,7 @@
       let query = this.$route.query
       let service = ''
       Object.keys(query).forEach(function (key) {
-        if (key === 'serviceName') {
+        if (key === 'service') {
           service = query[key]
         }
       })