diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java
index 8acd62d..d1d68a0 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java
@@ -1,6 +1,8 @@
 package com.supwisdom.leaveschool.client.controller.web.admin;
 
 
+import java.util.HashMap;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +11,7 @@
 
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminUserRemoteService;
 import com.supwisdom.leaveschool.client.util.AuthenticationUtil;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.User;
 
@@ -26,7 +29,12 @@
     
     logger.debug(AuthenticationUtil.currentUsername());
     
-    PagerResponseModel<User> users = sampleUser1AdminUserRemoteService.list();
+    PagerRequestModel pagerRequestModel = new PagerRequestModel();  // 分页请求，默认 pageIndex=0, pageSize=20
+    // 查询条件
+    pagerRequestModel.setMapBean(new HashMap<String, Object>());
+    pagerRequestModel.getMapBean().put("status", "1");
+    
+    PagerResponseModel<User> users = sampleUser1AdminUserRemoteService.list(pagerRequestModel);
     
     logger.debug("list is {}, {}", users==null?"":users.getClass().getName(), users);
     
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
index bd98ff5..a83980f 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
@@ -1,7 +1,5 @@
 package com.supwisdom.leaveschool.client.service;
 
-import java.util.Map;
-
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -10,7 +8,9 @@
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import com.supwisdom.leaveschool.client.service.fallback.SampleUser1AdminGroupRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.Group;
 
 @FeignClient(
@@ -21,18 +21,18 @@
 public interface SampleUser1AdminGroupRemoteService {
 
   @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public PagerResponseModel<Group> list();
+  public PagerResponseModel<Group> list(PagerRequestModel pagerRequestModel);
 
   @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   public Group get(@PathVariable("id") String id);
 
   @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> create(@RequestBody Group user);
+  public SuccessResponseModel create(@RequestBody Group user);
   
   @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> update(@RequestBody Group user);
+  public SuccessResponseModel update(@RequestBody Group user);
   
   @RequestMapping(path = "/{id}", method = RequestMethod.DELETE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> delete(@PathVariable("id") String id);
+  public SuccessResponseModel delete(@PathVariable("id") String id);
   
 }
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
index 669675a..0f74258 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
@@ -1,7 +1,5 @@
 package com.supwisdom.leaveschool.client.service;
 
-import java.util.Map;
-
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -10,7 +8,9 @@
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import com.supwisdom.leaveschool.client.service.fallback.SampleUser1AdminRoleRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.Role;
 
 @FeignClient(
@@ -21,18 +21,18 @@
 public interface SampleUser1AdminRoleRemoteService {
   
   @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public PagerResponseModel<Role> list();
+  public PagerResponseModel<Role> list(PagerRequestModel pagerRequestModel);
 
   @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   public Role get(@PathVariable("id") String id);
 
   @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> create(@RequestBody Role user);
+  public SuccessResponseModel create(@RequestBody Role user);
   
   @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> update(@RequestBody Role user);
+  public SuccessResponseModel update(@RequestBody Role user);
   
   @RequestMapping(path = "/{id}", method = RequestMethod.DELETE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> delete(@PathVariable("id") String id);
+  public SuccessResponseModel delete(@PathVariable("id") String id);
   
 }
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
index 74012c0..6d361df 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
@@ -1,7 +1,5 @@
 package com.supwisdom.leaveschool.client.service;
 
-import java.util.Map;
-
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -10,7 +8,9 @@
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import com.supwisdom.leaveschool.client.service.fallback.SampleUser1AdminUserRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.User;
 
 @FeignClient(
@@ -21,18 +21,18 @@
 public interface SampleUser1AdminUserRemoteService {
   
   @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public PagerResponseModel<User> list();
+  public PagerResponseModel<User> list(PagerRequestModel pagerRequestModel);
 
   @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   public User get(@PathVariable("id") String id);
 
   @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> create(@RequestBody User user);
+  public SuccessResponseModel create(@RequestBody User user);
   
   @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> update(@RequestBody User user);
+  public SuccessResponseModel update(@RequestBody User user);
   
   @RequestMapping(path = "/{id}", method = RequestMethod.DELETE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Map<String, Object> delete(@PathVariable("id") String id);
+  public SuccessResponseModel delete(@PathVariable("id") String id);
   
 }
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
index dd985e0..3ec265a 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
@@ -1,13 +1,13 @@
 package com.supwisdom.leaveschool.client.service.fallback;
 
-import java.util.Map;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminGroupRemoteService;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.Group;
 
 @Component
@@ -16,7 +16,7 @@
   private static final Logger logger = LoggerFactory.getLogger(SampleUser1AdminGroupRemoteHystrix.class);
 
   @Override
-  public PagerResponseModel<Group> list() {
+  public PagerResponseModel<Group> list(PagerRequestModel pagerRequestModel) {
     return null;
   }
 
@@ -26,17 +26,17 @@
   }
 
   @Override
-  public Map<String, Object> create(Group user) {
+  public SuccessResponseModel create(Group user) {
     return null;
   }
 
   @Override
-  public Map<String, Object> update(Group user) {
+  public SuccessResponseModel update(Group user) {
     return null;
   }
 
   @Override
-  public Map<String, Object> delete(String id) {
+  public SuccessResponseModel delete(String id) {
     return null;
   }
 
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
index dcb8cc5..7498b5b 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
@@ -1,13 +1,13 @@
 package com.supwisdom.leaveschool.client.service.fallback;
 
-import java.util.Map;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminRoleRemoteService;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.Role;
 
 @Component
@@ -16,7 +16,7 @@
   private static final Logger logger = LoggerFactory.getLogger(SampleUser1AdminRoleRemoteHystrix.class);
 
   @Override
-  public PagerResponseModel<Role> list() {
+  public PagerResponseModel<Role> list(PagerRequestModel pagerRequestModel) {
     return null;
   }
 
@@ -26,17 +26,17 @@
   }
 
   @Override
-  public Map<String, Object> create(Role user) {
+  public SuccessResponseModel create(Role user) {
     return null;
   }
 
   @Override
-  public Map<String, Object> update(Role user) {
+  public SuccessResponseModel update(Role user) {
     return null;
   }
 
   @Override
-  public Map<String, Object> delete(String id) {
+  public SuccessResponseModel delete(String id) {
     return null;
   }
 
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
index 0f4f9a8..e60a53b 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
@@ -1,13 +1,13 @@
 package com.supwisdom.leaveschool.client.service.fallback;
 
-import java.util.Map;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminUserRemoteService;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.common.model.SuccessResponseModel;
 import com.supwisdom.leaveschool.proxy.user.domain.User;
 
 @Component
@@ -16,7 +16,7 @@
   private static final Logger logger = LoggerFactory.getLogger(SampleUser1AdminUserRemoteHystrix.class);
 
   @Override
-  public PagerResponseModel<User> list() {
+  public PagerResponseModel<User> list(PagerRequestModel pagerRequestModel) {
     return null;
   }
 
@@ -26,17 +26,17 @@
   }
 
   @Override
-  public Map<String, Object> create(User user) {
+  public SuccessResponseModel create(User user) {
     return null;
   }
 
   @Override
-  public Map<String, Object> update(User user) {
+  public SuccessResponseModel update(User user) {
     return null;
   }
 
   @Override
-  public Map<String, Object> delete(String id) {
+  public SuccessResponseModel delete(String id) {
     return null;
   }
 
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/SuccessResponseModel.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/SuccessResponseModel.java
new file mode 100644
index 0000000..e2f967b
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/SuccessResponseModel.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.proxy.common.model;
+
+import java.io.Serializable;
+
+public class SuccessResponseModel implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 280042050835200337L;
+  
+  private String success;
+
+  public String getSuccess() {
+    return success;
+  }
+
+  public void setSuccess(String success) {
+    this.success = success;
+  }
+
+}
