1.依赖状态枚举

  1. /**
  2. * status enum
  3. */
  4. public enum Status {
  5. SUCCESS(0, "success", "成功"),
  6. INTERNAL_SERVER_ERROR_ARGS(10000, "Internal Server Error: {0}", "服务端异常: {0}"),
  7. REQUEST_PARAMS_NOT_VALID_ERROR(10001, "request parameter {0} is not valid", "请求参数[{0}]无效"),
  8. CREATE_JOB_FAILED(10002, "create job failed", "创建任务失败"),
  9. JOB_NOT_EXISTS(10005, "job {0} not exists", "任务{0}不存在"),
  10. SCENE_NOT_EXISTS(10055, "scene {0} not exists", "场景{0}不存在"),
  11. UPDATE_SCENE_ERROR(10056, "update scene error", "场景更新失败"),
  12. DELETE_PROJECT_ERROR_JOBS_NOT_NULL(10137, "please delete the job in project first!", "请先删除全部Job"),
  13. STOP_JOB_FAILED(10007, "stop job failed", "停止任务失败"),
  14. EXECUTE_JOB_FAILED(10008, "execute job failed", "执行任务失败"),
  15. QUERY_JOB_FAILED(10009, "query job failed", "查询任务失败"),
  16. QUERY_JOB_NODE_FAILED(40001, "query job node failed", "查询任务节点失败"),
  17. STOP_JOB_NODE_FAILED(40002, "stop job node failed", "停止任务节点失败"),
  18. JOB_NODE_NOT_RUNNING(40003, "job node {0} is not running", "任务节点{0}已停止"),
  19. DELETE_JOB_FAILED(10003, "query job failed", "删除任务失败"),
  20. RELEASE_JOB_FAILED(40000, "release job failed", "上线任务失败"),
  21. JOB_STATUS_FAILED(10006, "job status failed", "任务状态异常"),
  22. JOB_HAS_RUNNING_INSTANCE(10061, "job {0} has running instance", "任务{0}已经提交过,请勿重复提交"),
  23. JOB_NOT_ONLINE(10060, "job {0} not online", "任务{0}未上线"),
  24. JOB_NOT_RUNNING(10062, "job {0} not running", "任务{0}为运行"),
  25. USER_NAME_NULL(10004,"user name is null", "用户名不能为空"),
  26. USER_NOT_EXIST(10010, "user {0} not exists", "用户[{0}]不存在"),
  27. USER_NAME_PASSWD_ERROR(10013,"user name or password error", "用户名或密码错误"),
  28. LOGIN_SESSION_FAILED(10014,"create session failed!", "创建session失败"),
  29. LOGIN_SUCCESS(10042,"login success", "登录成功"),
  30. IP_IS_EMPTY(10125,"ip is empty", "IP地址不能为空"),
  31. PROJECT_ALREADY_EXISTS(10019, "project {0} already exists", "项目名称[{0}]已存在"),
  32. JOB_NOT_ALLOWED_EDIT(10020, "job {0} online not allowed edit", "项目名称[{0}]已存在"),
  33. CREATE_PROJECT_ERROR(10048,"create project error", "创建项目错误"),
  34. PROJECT_NOT_FOUNT(10018, "project {0} not found ", "项目[{0}]不存在"),
  35. UPDATE_PROJECT_ERROR(10046,"update project error", "更新项目信息错误"),
  36. UPDATE_JOB_ERROR(10107,"update job error", "更新Job信息错误"),
  37. UPDATE_NODE_ERROR(10108,"update node {0} error", "更新Node {0} 信息错误"),
  38. USER_NO_OPERATION_PERM(30001, "user has no operation privilege", "当前用户没有操作权限"),
  39. DELETE_PROJECT_ERROR(10050,"delete project error", "删除项目错误"),
  40. DELETE_JOB_ERROR(10055,"delete job error", "删除Job错误"),
  41. TARGET_KEYWORD_ERROR(10051,"target app {0} keyword error", "目标应用 {0} 关键字未配置"),
  42. TARGET_ERROR(10054,"target error", "目标配置错误"),
  43. CREATE_PROJECT_USER_ERROR(10052,"create project user error", "创建项目关联用户错误"),
  44. DEL_PROJECT_USER_ERROR(10053,"del project user error", "删除项目关系错误"),
  45. USER_NO_OPERATION_PROJECT_PERM(30002, "user {0} is not has project {1} permission", "当前用户[{0}]没有[{1}]项目的操作权限"),
  46. START_JOB_ERROR(50014,"start job error", "运行任务失败"),
  47. STOP_JOB_ERROR(50015,"stop job error", "停止任务失败"),
  48. STOP_JOB_NODE_ERROR(50016,"stop job node error", "停止任务节点失败"),
  49. QUERY_JOB_NODE_LIST_ERROR(50017,"query job node list error", "查询任务节点失败"),
  50. QUERY_JOB_LIST_ERROR(50018,"query job list error", "查询任务失败"),
  51. QUERY_APP_LIST_ERROR(50019,"query app list error", "查询APP失败"),
  52. QUERY_INSTANCE_LIST_ERROR(50020,"query instance list error", "查询实例失败"),
  53. UPDATE_APP_KEYWORD_FAILED(50021,"update app {0} keyword error", "更新应用 {0} 关键字失败"),
  54. DELETE_RE_APP_ERROR(50022,"delete app error", "删除授权失败"),
  55. UPDATE_APP_KEYWORD_ERROR(50021,"update app keyword error", "更新应用关键字失败"),
  56. CLIENT_DEPLOY_ERROR(60001,"client deploy error", "客户端部署失败"),
  57. JOB_IDS_IS_EMPTY(60002,"job ids is empty", "请求的ids为空"),
  58. QUERY_APP_NO_PERMISSION(60003,"query all app no permission", "没有权限查询所有app"),
  59. QUERY_PROJECT_NO_PERMISSION(60004,"query all project no permission", "没有权限查询所有项目"),
  60. APP_IDS_IS_EMPTY(60005,"app id is null", "传入的appId为空"),
  61. ;
  62. private final int code;
  63. private final String enMsg;
  64. private final String zhMsg;
  65. private Status(int code, String enMsg, String zhMsg) {
  66. this.code = code;
  67. this.enMsg = enMsg;
  68. this.zhMsg = zhMsg;
  69. }
  70. public int getCode() {
  71. return this.code;
  72. }
  73. public String getMsg() {
  74. if (Locale.SIMPLIFIED_CHINESE.getLanguage().equals(LocaleContextHolder.getLocale().getLanguage())) {
  75. return this.zhMsg;
  76. } else {
  77. return this.enMsg;
  78. }
  79. }
  80. }

2.基础controller,封装统一返回,包含success方法,error方法

  1. public class BaseController {
  2. /**
  3. * get ip address in the http request
  4. *
  5. * @param request http servlet request
  6. * @return client ip address
  7. */
  8. public static String getClientIpAddress(HttpServletRequest request) {
  9. String clientIp = request.getHeader(HTTP_X_FORWARDED_FOR);
  10. if (StringUtils.isNotEmpty(clientIp) && !clientIp.equalsIgnoreCase(HTTP_HEADER_UNKNOWN)) {
  11. int index = clientIp.indexOf(COMMA);
  12. if (index != -1) {
  13. return clientIp.substring(0, index);
  14. } else {
  15. return clientIp;
  16. }
  17. }
  18. clientIp = request.getHeader(HTTP_X_REAL_IP);
  19. if (StringUtils.isNotEmpty(clientIp) && !clientIp.equalsIgnoreCase(HTTP_HEADER_UNKNOWN)) {
  20. return clientIp;
  21. }
  22. return request.getRemoteAddr();
  23. }
  24. /**
  25. * return data list
  26. *
  27. * @param result result code
  28. * @return result code
  29. */
  30. public Result returnDataList(Map<String, Object> result) {
  31. Status status = (Status) result.get(Constants.STATUS);
  32. if (status == Status.SUCCESS) {
  33. String msg = Status.SUCCESS.getMsg();
  34. Object datalist = result.get(Constants.DATA_LIST);
  35. return success(msg, datalist);
  36. } else {
  37. Integer code = status.getCode();
  38. String msg = (String) result.get(Constants.MSG);
  39. return error(code, msg);
  40. }
  41. }
  42. /**
  43. * success
  44. *
  45. * @return success result code
  46. */
  47. public Result success() {
  48. Result result = new Result();
  49. result.setCode(Status.SUCCESS.getCode());
  50. result.setMsg(Status.SUCCESS.getMsg());
  51. return result;
  52. }
  53. /**
  54. * success does not need to return data
  55. *
  56. * @param msg success message
  57. * @return success result code
  58. */
  59. public Result success(String msg) {
  60. Result result = new Result();
  61. result.setCode(Status.SUCCESS.getCode());
  62. result.setMsg(msg);
  63. return result;
  64. }
  65. public Result returnDataListPaging(Map<String, Object> result) {
  66. Status status = (Status) result.get(Constants.STATUS);
  67. if (status == Status.SUCCESS) {
  68. result.put(Constants.MSG, Status.SUCCESS.getMsg());
  69. PageInfo<Object> pageInfo = (PageInfo<Object>) result.get(Constants.DATA_LIST);
  70. return success(pageInfo.getLists(), pageInfo.getCurrentPage(), pageInfo.getTotalCount(),
  71. pageInfo.getTotalPage());
  72. } else {
  73. Integer code = status.getCode();
  74. String msg = (String) result.get(Constants.MSG);
  75. return error(code, msg);
  76. }
  77. }
  78. /**
  79. * return data no paging
  80. *
  81. * @param msg success message
  82. * @param list data list
  83. * @return success result code
  84. */
  85. public Result success(String msg, Object list) {
  86. return getResult(msg, list);
  87. }
  88. /**
  89. * return data no paging
  90. *
  91. * @param list success
  92. * @return success result code
  93. */
  94. public Result success(Object list) {
  95. return getResult(Status.SUCCESS.getMsg(), list);
  96. }
  97. /**
  98. * return the data use Map format, for example, passing the value of key, value, passing a value
  99. * eg. "/user/add" then return user name: zhangsan
  100. *
  101. * @param msg message
  102. * @param object success object data
  103. * @return success result code
  104. */
  105. public Result success(String msg, Map<String, Object> object) {
  106. return getResult(msg, object);
  107. }
  108. /**
  109. * return data with paging
  110. *
  111. * @param totalList success object list
  112. * @param currentPage current page
  113. * @param total total
  114. * @param totalPage total page
  115. * @return success result code
  116. */
  117. public Result success(Object totalList, Integer currentPage,
  118. Integer total, Integer totalPage) {
  119. Result result = new Result();
  120. result.setCode(Status.SUCCESS.getCode());
  121. result.setMsg(Status.SUCCESS.getMsg());
  122. Map<String, Object> map = new HashMap<>(4);
  123. map.put(Constants.TOTAL_LIST, totalList);
  124. map.put(Constants.CURRENT_PAGE, currentPage);
  125. map.put(Constants.TOTAL_PAGE, totalPage);
  126. map.put(Constants.TOTAL, total);
  127. result.setData(map);
  128. return result;
  129. }
  130. /**
  131. * error handle
  132. *
  133. * @param code result code
  134. * @param msg result message
  135. * @return error result code
  136. */
  137. public Result error(Integer code, String msg) {
  138. Result result = new Result();
  139. result.setCode(code);
  140. result.setMsg(msg);
  141. return result;
  142. }
  143. /**
  144. * put message to map
  145. *
  146. * @param result result
  147. * @param status status
  148. * @param statusParams object messages
  149. */
  150. protected void putMsg(Map<String, Object> result, Status status, Object... statusParams) {
  151. result.put(Constants.STATUS, status);
  152. if (statusParams != null && statusParams.length > 0) {
  153. result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams));
  154. } else {
  155. result.put(Constants.MSG, status.getMsg());
  156. }
  157. }
  158. /**
  159. * put message to result object
  160. *
  161. * @param result result
  162. * @param status status
  163. * @param statusParams status parameters
  164. */
  165. protected void putMsg(Result result, Status status, Object... statusParams) {
  166. result.setCode(status.getCode());
  167. if (statusParams != null && statusParams.length > 0) {
  168. result.setMsg(MessageFormat.format(status.getMsg(), statusParams));
  169. } else {
  170. result.setMsg(status.getMsg());
  171. }
  172. }
  173. /**
  174. * get result
  175. * @param msg message
  176. * @param list object list
  177. * @return result code
  178. */
  179. private Result getResult(String msg, Object list) {
  180. Result result = new Result();
  181. result.setCode(Status.SUCCESS.getCode());
  182. result.setMsg(msg);
  183. result.setData(list);
  184. return result;
  185. }
  186. }

3.统计封装对象Result

  1. public class Result<T> {
  2. /**
  3. * status
  4. */
  5. private Integer code;
  6. /**
  7. * message
  8. */
  9. private String msg;
  10. /**
  11. * data
  12. */
  13. private T data;
  14. public Result() {
  15. }
  16. public Result(Integer code, String msg) {
  17. this.code = code;
  18. this.msg = msg;
  19. }
  20. private Result(T data) {
  21. this.code = 0;
  22. this.data = data;
  23. }
  24. private Result(Status status) {
  25. if (status != null) {
  26. this.code = status.getCode();
  27. this.msg = status.getMsg();
  28. }
  29. }
  30. /**
  31. * Call this function if there is success
  32. *
  33. * @param data data
  34. * @param <T> type
  35. * @return resule
  36. */
  37. public static <T> Result<T> success(T data) {
  38. return new Result<>(data);
  39. }
  40. /**
  41. * Call this function if there is any error
  42. *
  43. * @param status status
  44. * @return result
  45. */
  46. public static Result error(Status status) {
  47. return new Result(status);
  48. }
  49. /**
  50. * Call this function if there is any error
  51. *
  52. * @param status status
  53. * @param args args
  54. * @return result
  55. */
  56. public static Result errorWithArgs(Status status, Object... args) {
  57. return new Result(status.getCode(), MessageFormat.format(status.getMsg(), args));
  58. }
  59. public Integer getCode() {
  60. return code;
  61. }
  62. public void setCode(Integer code) {
  63. this.code = code;
  64. }
  65. public String getMsg() {
  66. return msg;
  67. }
  68. public void setMsg(String msg) {
  69. this.msg = msg;
  70. }
  71. public T getData() {
  72. return data;
  73. }
  74. public void setData(T data) {
  75. this.data = data;
  76. }
  77. @Override
  78. public String toString() {
  79. return "Status{" +
  80. "code='" + code + '\'' +
  81. ", msg='" + msg + '\'' +
  82. ", data=" + data +
  83. '}';
  84. }
  85. }

4.基础service,封装统一的业务逻辑,权限,数据

  1. public class BaseService {
  2. /**
  3. * check admin
  4. *
  5. * @param user input user
  6. * @return ture if administrator, otherwise return false
  7. */
  8. protected boolean isAdmin(ChaosUser user) {
  9. return user.getUserType() == UserType.ADMIN_USER;
  10. }
  11. /**
  12. * check admin
  13. *
  14. * @param loginUser login user
  15. * @param result result code
  16. * @return true if administrator, otherwise false
  17. */
  18. protected boolean checkAdmin(ChaosUser loginUser, Map<String, Object> result) {
  19. //only admin can operate
  20. if (!isAdmin(loginUser)) {
  21. putMsg(result, Status.USER_NO_OPERATION_PERM);
  22. return true;
  23. }
  24. return false;
  25. }
  26. /**
  27. * put message to map
  28. *
  29. * @param result result code
  30. * @param status status
  31. * @param statusParams status message
  32. */
  33. protected void putMsg(Map<String, Object> result, Status status, Object... statusParams) {
  34. result.put(Constants.STATUS, status);
  35. if (statusParams != null && statusParams.length > 0) {
  36. result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams));
  37. } else {
  38. result.put(Constants.MSG, status.getMsg());
  39. }
  40. }
  41. /**
  42. * put message to result object
  43. *
  44. * @param result result code
  45. * @param status status
  46. * @param statusParams status message
  47. */
  48. protected void putMsg(Result result, Status status, Object... statusParams) {
  49. result.setCode(status.getCode());
  50. if (statusParams != null && statusParams.length > 0) {
  51. result.setMsg(MessageFormat.format(status.getMsg(), statusParams));
  52. } else {
  53. result.setMsg(status.getMsg());
  54. }
  55. }
  56. /**
  57. * get cookie info by name
  58. * @param request request
  59. * @param name 'sessionId'
  60. * @return get cookie info
  61. */
  62. public static Cookie getCookie(HttpServletRequest request, String name) {
  63. Cookie[] cookies = request.getCookies();
  64. if (cookies != null && cookies.length > 0) {
  65. for (Cookie cookie : cookies) {
  66. if (StringUtils.isNotEmpty(name) && name.equalsIgnoreCase(cookie.getName())) {
  67. return cookie;
  68. }
  69. }
  70. }
  71. return null;
  72. }
  73. protected boolean hasPerm(ChaosUser operateUser, int groupId, List<Integer> currentGroupIds){
  74. return isAdmin(operateUser) || currentGroupIds.contains(groupId);
  75. }
  76. protected boolean hasPerm(ChaosUser operateUser, String createUserName){
  77. return operateUser.getUsername().equalsIgnoreCase(createUserName) || isAdmin(operateUser);
  78. }
  79. }

5.基于BaseController 写自己的业务controller

  1. @RestController
  2. @RequestMapping("projects/user")
  3. @Api(tags = "用户授权管理")
  4. public class ProjectUserController extends BaseController {
  5. private static final Logger logger = LoggerFactory.getLogger(ProjectUserController.class);
  6. @Resource
  7. ProjectUserService projectUserService;
  8. /**
  9. * 添加场景
  10. */
  11. @ApiOperation(value = "添加权限", notes = "添加权限")
  12. @PostMapping("/perm/add")
  13. public Result addProjectUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) ChaosUser loginUser,
  14. @RequestParam(value = "userNames") String userErp,
  15. @RequestParam(value = "projectId") int projectId) {
  16. logger.info("user {}, add perm user:{} projectId:{}", loginUser.getUsername(), userErp, projectId);
  17. Map<String, Object> result = projectUserService.addBatch(loginUser, userErp, projectId);
  18. return returnDataList(result);
  19. }
  20. /**
  21. * 添加场景
  22. */
  23. @ApiOperation(value = "查询权限", notes = "查询权限")
  24. @GetMapping("/perm/list")
  25. public Result listProjectUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) ChaosUser loginUser) {
  26. logger.info("user {}, query perm list", loginUser.getUsername());
  27. Map<String, Object> result = projectUserService.listProjectUser();
  28. return returnDataList(result);
  29. }
  30. /**
  31. * 添加场景
  32. */
  33. @ApiOperation(value = "删除权限", notes = "删除权限")
  34. @DeleteMapping("/perm/del/{id}")
  35. public Result delProjectUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) ChaosUser loginUser,
  36. @ApiParam(name = "id", value = "主键id", required = true) @PathVariable("id") int id) {
  37. logger.info("user {}, query perm list", loginUser.getUsername());
  38. Map<String, Object> result = projectUserService.delProjectUser(id);
  39. return returnDataList(result);
  40. }
  41. @ApiOperation(value = "查询全部用户", notes = "查询全部用户")
  42. @GetMapping("/all")
  43. public Result queryAllUser(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) ChaosUser loginUser) {
  44. logger.info("user {}, query all user list", loginUser.getUsername());
  45. Map<String, Object> result = projectUserService.listAllUser();
  46. return returnDataList(result);
  47. }
  48. }

6.基于BaseService编写自己的业务service

  1. @Service
  2. public class ProjectUserService extends BaseService {
  3. private static final Logger logger = LoggerFactory.getLogger(ProjectUserService.class);
  4. @Resource
  5. ProjectUserMapper projectUserMapper;
  6. @Resource
  7. private ChaosLoginErpMapper loginErpMapper;
  8. /**
  9. * 添加权限
  10. * @param loginUser
  11. * @param userErp
  12. * @param projectId
  13. * @return
  14. */
  15. public Map<String,Object> addProjectUser(ChaosUser loginUser, String userErp, int projectId){
  16. Map<String, Object> result = Maps.newHashMap();
  17. QueryWrapper<ProjectUser> queryWrapper = Wrappers.query();
  18. queryWrapper.eq(ProjectUser.USER_NAME,userErp);
  19. queryWrapper.eq(ProjectUser.PROJECT_ID,projectId);
  20. List<ProjectUser> list = projectUserMapper.selectList(queryWrapper);
  21. if (CollectionUtils.isEmpty(list)){
  22. boolean permStatus = generateProjectUser(loginUser,userErp,projectId);
  23. if (!permStatus){
  24. putMsg(result,Status.CREATE_PROJECT_USER_ERROR,Status.CREATE_PROJECT_USER_ERROR.getMsg());
  25. }else{
  26. putMsg(result,Status.SUCCESS);
  27. }
  28. }else{
  29. putMsg(result,Status.SUCCESS);
  30. }
  31. return result;
  32. }
  33. @Transactional
  34. public Map<String, Object> addBatch(ChaosUser loginUser, String erps, int projectId) {
  35. Map<String, Object> result = Maps.newHashMap();
  36. projectUserMapper.deleteByProjectId(projectId);
  37. if (StringUtils.isEmpty(erps)) {
  38. putMsg(result, Status.SUCCESS);
  39. return result;
  40. }
  41. String[] erpArray = erps.split(COMMA);
  42. for (String s : erpArray) {
  43. generateProjectUser(loginUser, s, projectId);
  44. }
  45. putMsg(result,Status.SUCCESS);
  46. return result;
  47. }
  48. public boolean generateProjectUser(ChaosUser loginUser,String userErp,int projectId){
  49. ProjectUser projectUser = new ProjectUser();
  50. projectUser.setUserName(userErp);
  51. projectUser.setProjectId(projectId);
  52. projectUser.setCreateTime(new Date());
  53. projectUser.setUpdateTime(new Date());
  54. projectUser.setCreateUser(loginUser.getUsername());
  55. projectUser.setUpdateUser(loginUser.getUsername());
  56. return projectUserMapper.insert(projectUser) > 0;
  57. }
  58. /**
  59. * 列出用户权限
  60. * @return
  61. */
  62. public Map<String,Object> listProjectUser(){
  63. Map<String,Object> result = Maps.newHashMap();
  64. // List<ProjectUser> list = projectUserMapper.selectList(null);
  65. List<ProjectUser> list = projectUserMapper.queryProjectUser();
  66. putMsg(result,Status.SUCCESS);
  67. result.put(Constants.DATA_LIST,list);
  68. return result;
  69. }
  70. public Map<String,Object> listAllUser(){
  71. Map<String,Object> result = Maps.newHashMap();
  72. // List<ProjectUser> list = projectUserMapper.selectList(null);
  73. List<ChaosLoginErp> list = loginErpMapper.selectList(null);
  74. putMsg(result,Status.SUCCESS);
  75. result.put(Constants.DATA_LIST,list);
  76. return result;
  77. }
  78. public Map<String,Object> delProjectUser(int id){
  79. Map<String,Object> result = Maps.newHashMap();
  80. boolean delStatus = projectUserMapper.deleteById(id) > 0 ? true: false;
  81. if (!delStatus){
  82. putMsg(result,Status.DEL_PROJECT_USER_ERROR,Status.DEL_PROJECT_USER_ERROR.getMsg());
  83. }else{
  84. putMsg(result,Status.SUCCESS);
  85. }
  86. return result;
  87. }
  88. }

基础BaseController的更多相关文章

  1. springMVC基础controller类

    此文章是基于 搭建SpringMVC+Spring+Hibernate平台 功能:设置请求.响应对象:session.cookie操作:ajax访问返回json数据: 创建springMVC基础con ...

  2. 使用Spring Boot搭建应用开发框架(一) —— 基础架构

    Spring的简史 第一阶段:XML配置,在Spring1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件分放到不同的配置文件里,那时候需要频繁的在 ...

  3. Spring Boot 构建电商基础秒杀项目 (十) 交易下单

    SpringBoot构建电商基础秒杀项目 学习笔记 新建表 create table if not exists order_info ( id varchar(32) not null defaul ...

  4. Spring Boot 构建电商基础秒杀项目 (八) 商品创建

    SpringBoot构建电商基础秒杀项目 学习笔记 新建数据表 create table if not exists item ( id int not null auto_increment, ti ...

  5. Spring Boot 构建电商基础秒杀项目 (四) getotp 页面

    SpringBoot构建电商基础秒杀项目 学习笔记 BaseController 添加 public static final String CONTENT_TYPE_FORMED = "a ...

  6. Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 & 异常处理

    SpringBoot构建电商基础秒杀项目 学习笔记 定义通用的返回对象 public class CommonReturnType { // success, fail private String ...

  7. 接口开发-基于SpringBoot创建基础框架

    说到接口开发,能想到的开发语言有很多种,像什么Java啊..NET啊.PHP啊.NodeJS啊,太多可以用.为什么选择Java,究其原因,最后只有一个解释,那就是“学Java的人多,人员招聘范围大,有 ...

  8. 基于SpringBoot搭建应用开发框架(一) —— 基础架构

    目录 Spring的简史 零.开发技术简介 一.创建项目 1.创建工程 2.创建Starter 3.启动项目 4.Spring Boot 配置 5.项目结构划分 二.基础结构功能 1.web支持 2. ...

  9. 六、EnterpriseFrameWork框架基础功能之权限管理

    回<[开源]EnterpriseFrameWork框架系列文章索引> 从本章开始进入框架的第二块内容“EnterpriseFrameWork框架的基础功能”,包括:权限管理.字典数据管理. ...

随机推荐

  1. 12- APP接口测试以及接口文档的分析

    什么是接口? 为什么要做接口测试? 接口测试流程 需求评审 需求分析 接口用例设计 执行测试用例 bug的定位于追踪 接口文档分析 接口文档分析:开发 内容: 1.接口名称 2.接口地址 3.支持方式 ...

  2. hdu3585 二分最大团(dp优化)

    题意       给你一些点( <= 50),让你找到k个点,使得他们之间的最小距离最大. 思路:       求最小的最大,我们可以直接二分去枚举距离,但是要注意,不要去二分double找距离 ...

  3. GUI基础知识点

    简介 GUI的核心技术:AWT(是Swing 的前身) Swing 不流行的原因 界面不美观 运行需要jre环境(可能一个项目的大小比jre还要大) 为什么我们需要学习 了解MVC架构和监听 AWT ...

  4. 脱离xml使用JavaConfig实现Spring配置

    总结 情况一: 配置类中类名添加 @Configuration 注解,同时提供一个方法返回一个Bean实例,且这个方法添加注解 @Bean ,就可以由Spring管理此对象 如下所示: User.ja ...

  5. PHP使用引用实现无限极分类

    PHP实现无限极分类 引用 <?php /** * 无限极分类实现 * @param $list array 需要处理的数组 * @param $pk string 主id * @param $ ...

  6. java面试一日一题:如何判断一个对象是否为垃圾对象

    问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...

  7. Java并发编程(二)如何保证线程同时/交替执行

    第一篇文章中,我用如何保证线程顺序执行的例子作为Java并发系列的开胃菜.本篇我们依然不会有源码分析,而是用另外两个多线程的例子来引出Java.util.concurrent中的几个并发工具的用法. ...

  8. 【近取 Key】Alpha - v1.0 版本发布说明

    功能与特性 Alpha 版本虽然为本软件的第一代版本,但已基本覆盖了用户个人使用时的主要功能.除登陆注册与后台管理外,下文将分版块详细介绍面向用户的主要功能特性. 『产品主页』 潜在应用场景 场景 0 ...

  9. 消息队列RabbitMQ(二):RabbitMQ的系统架构概述

    前言 RabbitMQ是基于AMQP协议的,要想深入理解RabbitMQ,就必须先了解AMQP是个什么东东? AMQP协议 AMQP即Advanced Message Queuing Protocol ...

  10. Spark大数据处理框架入门(单机版)

    导读 引言 环境准备 安装步骤 1.下载地址 2.开始下载 3.解压spark 4.配置环境变量 5.配置 spark-env.sh 6.启动spark服务 7.测试spark stay hungry ...