说到接口开发,能想到的开发语言有不少种,像什么Java啊、.NET啊、PHP啊、NodeJS啊,太多能够用。为何选择Java,究其缘由,最后只有一个解释,那就是“学Java的人多,人员招聘范围大,有利于团队扩建”。真要说说效率的话,恕我直言,真不如NodeJS(其余的.NET、PHP我不会,O(∩_∩)O~~)。前端
言归正传,基于Java的框架不少,最终选择了SpringBoot(中间的过程就不说了,折磨了我2天),咱们要实现的主要目标,一句话归纳“收到前端发送的API接口请求,完成数据以及逻辑处理,返回结果数据”。java
1、建立基础工程web
1. 打开IDEA -> File -> New -> Project...spring
建立完工程之后,大概就是上面这个模样(别着急继续,等你的Maven把依赖库下载完,再继续下面的。若是你连Maven都没安装的话,先自行百度把Maven配置好)。api
二. 建立项目目录数组
(庆幸一口气在图片上都标注号了)springboot
多说一句,目录结构,彻底能够根据本身的项目须要从新归置,毕竟本身用的顺手才是最重要的。app
3、接下来写个样例框架
controller/Testthis
package com.univalsoft.springbootapimaster.api.controller; import com.univalsoft.springbootapimaster.common.controller.BaseController; import com.univalsoft.springbootapimaster.common.model.APIResponse; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class Test extends BaseController { @RequestMapping(value = "/api/test/try", method = RequestMethod.POST) public APIResponse uploadImage( @RequestParam(value = "name") String name /* 姓名 */ ) { // if (name.length() < 3) { return this.fail("[姓名]参数不合法,请从新输入"); } String result = name + ", 欢迎浏览,转载请注明出处!!!(Univalsoft)"; return this.success(result); } }
如此简单的代码,就很少说了哈,看不懂的,自觉找个墙角面壁。
运行程序,have a try !
几个重要的基类
1. BaseController
package com.univalsoft.springbootapimaster.common.controller; import com.univalsoft.springbootapimaster.common.model.APIResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; @RestController public class BaseController { public final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 返回成功Response * * @param data * @return */ public APIResponse success(Object data) { logger.info("请求结束 :success: =>", data.toString()); APIResponse res = new APIResponse(); res.success(data); return res; } /** * 分页列表 * * @param data * @param pageIndex * @param pageSize * @param total * @return */ public APIResponse successWithPage(Object data, int pageIndex, int pageSize, int total) { logger.info("请求结束 :success: =>", data.toString()); APIResponse res = new APIResponse(); HashMap<String, Object> pageResponse = new HashMap<>(); pageResponse.put("data", data); pageResponse.put("current", pageIndex); pageResponse.put("hasMore", pageIndex * pageSize < total); pageResponse.put("total", total); res.success(pageResponse); return res; } /** * 返回错误Response * * @param errmsg * @return */ public APIResponse fail(String errmsg) { logger.info("请求结束 :fail: =>", errmsg); APIResponse res = new APIResponse(); res.fail(1, errmsg); return res; } }
2. APIResponse
package com.univalsoft.springbootapimaster.common.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class APIResponse { /** * */ private static final long serialVersionUID = 1L; public static final int ERROR_PARAM_INVALID = 40001; public static final int ERROR_AUTH_FAIL = 44001; // 认证信息失败 // 信息代码 private int errno; // 返回信息 private String errmsg; // 返回内容 private Object data; /** * 返回错误信息 * @param errno * @param errmsg */ public void fail(int errno, String errmsg) { this.errno = errno; this.errmsg = errmsg != null ? errmsg : ""; this.data = ""; // 总体错误 if (errno == ERROR_PARAM_INVALID) { this.errmsg = "参数不合法"; } else if (errno == ERROR_AUTH_FAIL) { this.errmsg = "信息认证失败"; } } /** * 分页数据查询 * * @param list 业务数据集合 * @param count 总条数 * @param current 当前页码 * @param pageSize 每页数量 */ public void setPageData(List list, Integer count, Integer current, Integer pageSize) { HashMap<String, Object> data = new HashMap<>(); data.put("totalAmount", count); // 符合条件的总条数 data.put("current", current); // 当前页码 data.put("amount", (count + pageSize - 1) / pageSize); // 总页数(向上取整) // 容错数组类型 if (list != null) { data.put("data", list); // 业务数据 } else { data.put("data", new ArrayList<>()); // 空业务数据 } this.data = data; } /** * 返回成功信息 * @param data */ public void success(Object data) { this.errno = 0; this.errmsg = ""; this.data = data; } public int getErrno() { return errno; } public void setErrno(int errno) { this.errno = errno; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
好了,基础工程完活。