diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java
index 3c0857d..5e71759 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java
+++ b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/api/HelloController.java
@@ -1,8 +1,8 @@
 package com.supwisdom.leaveschool.client.controller.api;
 
+import java.util.HashMap;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -12,8 +12,7 @@
 import com.supwisdom.leaveschool.client.security.core.userdetails.MyUser;
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminUserRemoteService;
 import com.supwisdom.leaveschool.client.util.MyUserUtil;
-import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
-import com.supwisdom.leaveschool.proxy.user.domain.User;
+import com.supwisdom.leaveschool.proxy.common.model.PagerRequestModel;
 
 @RestController
 @RequestMapping("/api/hello")
@@ -23,10 +22,15 @@
 	SampleUser1AdminUserRemoteService sampleUser1AdminUserRemoteService;
 	
 	@GetMapping(path = "/{name}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-	public PagerResponseModel hello(@PathVariable("name") String name) {
+	public MyUser hello(@PathVariable("name") String name) {
 		MyUser user = MyUserUtil.getCurrentMyUser();
-		PagerResponseModel<User> users = sampleUser1AdminUserRemoteService.list();
 		
-		return users;
+		//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);
+		
+		return user;
 	}
 }
diff --git a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java
index 8acd62d..dc3db14 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/admin/WebAdminUserController.java
+++ b/leaveschool/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,13 @@
     
     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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
index bd98ff5..a83980f 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
+++ b/leaveschool/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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
index 669675a..0f74258 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
+++ b/leaveschool/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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
index 74012c0..6d361df 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
+++ b/leaveschool/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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
index dd985e0..3ec265a 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
+++ b/leaveschool/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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
index dcb8cc5..7498b5b 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
+++ b/leaveschool/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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
index 0f4f9a8..e60a53b 100644
--- a/leaveschool/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
+++ b/leaveschool/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/leaveschool/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/SuccessResponseModel.java b/leaveschool/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/SuccessResponseModel.java
new file mode 100644
index 0000000..e2f967b
--- /dev/null
+++ b/leaveschool/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;
+  }
+
+}
