说到接口开发,能想到的开发语言有很多种,像什么Java啊、.NET啊、PHP啊、NodeJS啊,太多可以用。为什么选择Java,究其原因,最后只有一个解释,那就是“学Java的人多,人员招聘范围大,有利于团队扩建”。真要说说效率的话,恕我直言,真不如NodeJS(其他的.NET、PHP我不会,O(∩_∩)O~~)。

言归正传,基于Java的框架很多,最终选择了SpringBoot(中间的过程就不说了,折磨了我2天),我们要实现的主要目标,一句话概括“收到前端发送的API接口请求,完成数据以及逻辑处理,返回结果数据”。

一、创建基础工程

1. 打开IDEA -> File -> New -> Project...

创建完工程以后,大概就是上面这个模样(别着急继续,等你的Maven把依赖库下载完,再继续下面的。如果你连Maven都没安装的话,先自行百度把Maven配置好)。

二. 创建项目目录

(庆幸一口气在图片上都标注号了)

多说一句,目录结构,完全可以根据自己的项目需要重新归置,毕竟自己用的顺手才是最重要的。

三、接下来写个样例

controller/Test

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;
}
}

  

好了,基础工程完活。

接口开发-基于SpringBoot创建基础框架的更多相关文章

  1. 封装:简要介绍自定义开发基于WPF的MVC框架

    原文:封装:简要介绍自定义开发基于WPF的MVC框架 一.目的:在使用Asp.net Core时,深感MVC框架作为页面跳转数据处理的方便,但WPF中似乎没有现成的MVC框架,由此自定义开发一套MVC ...

  2. 基于springboot的SSM框架实现返回easyui-tree所需要数据

    1.easyui-tree easui-tree目所需要的数据结构类型如下: [ { "children": [ { "children": [], " ...

  3. PHP扩展开发(1)-创建基础框架

    生成PHP扩展开发的基础框架.   一.Linux下   $>cd ~/{php源码}/ext $>./ext_skel --extname=simple   Creating direc ...

  4. 如莲开发平台(MIS基础框架、Java技术、B/S结构)

    关于     「如莲」是一套MIS类系统基础框架,主要用于各类“管理信息系统”的开发,也适合做网站后台开发.可省去开发时的框架搭建.规范约定.权限管理等基础工作,直接专注于业务功能实现.     「如 ...

  5. 使用vue+elementUI+springboot创建基础后台增删改查的管理页面--(1)

    目前这家公司前端用的是vue框架,由于在之前的公司很少涉及到前端内容,对其的了解也只是会使用js和jquery,所以..慢慢来吧. 在此之前需要先了解vue的大致语法和规则,可先前往官方文档进行学习h ...

  6. 微信开发基于springboot

    0.申请一个微信公众号,记住他的appId,secret,token,accesstoken 1.创建一个springboot项目.在pom文件里面导入微信开发工具类 <dependency&g ...

  7. 使用PHP做移动端 api接口开发方法(适用于TP框架)

    1. [代码]使用TP框架时 放在common文件夹下文件名就叫function.php ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  8. Yii2 advanced版API接口开发 基于RESTful架构的 配置、实现、测试

    参考地址: http://www.xiaoxiangzi.com/Programme/PHP/3348.html http://www.cnblogs.com/ganiks/p/yii2-restfu ...

  9. 从SpringBoot到SpringCloudAlibaba简明教程(一):初识SpringBoot及其基础项目构建

    前言 Spring框架的大名想必大家早已如雷贯耳,我们来看一下springboot诞生的初衷,以及它在springframe的基础上解决了哪些痛点. 很久以前,J2EE还是java企业级应用的标准规范 ...

随机推荐

  1. 那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 ---

    /* 一个文本小写转换为大写的小程序,当客户端从键盘录入一串字符串发送到服务端服务端转换为大写返回给客户端 */ import java.io.*; import java.net.*; class ...

  2. lrc歌词文件格式

    一.lrc文件有什么作用 lrc文件就是一个文本文件,用来记录歌曲的歌词信息,使得播放歌曲时能够让歌词与声音同步显示,类似于电影字幕那种效果. 心情很丧时我们会听首歌陶冶一下情操,不知你是否注意过音乐 ...

  3. EM算法原理详解

    1.引言 以前我们讨论的概率模型都是只含观测变量(observable variable), 即这些变量都是可以观测出来的,那么给定数据,可以直接使用极大似然估计的方法或者贝叶斯估计的方法:但是当模型 ...

  4. 【mac】7z 终端命令行

    链接:http://www.2cto.com/os/201410/341079.html 7z指令 7z是7zip压缩工具的常用压缩文件格式.7zip是一个开源的压缩工具,软件本身十分小巧,功能强大, ...

  5. Android Camera详解

    相关的类 android.hardware.camera2 Camera SurfaceView---这个类用于向用户呈现实时相机预览. MediaRecorder---这个类用于从摄像机录制视频. ...

  6. 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

    弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...

  7. 使用Windows 2008R2中的NFS替代Samba协议,解决Windows 与Linux共享文件的问题

    一.在Windows服务器上进行安装NFS服务 首先,打开服务管理器,选择添加角色:     选中文件服务,下一步:     出现一个提示,不管它,继续下一步:     在接下来的页面中选中“网络文件 ...

  8. js 相对路径转为绝对路径

    有时为了唯一标识网址或其它开发需要,我们需要将相对的网址转换为绝对的网址.当然前人实现方式已经不少,但或多或少的存在缺点或兼容问题.下面我将总结已有实现并给出相对完美的实现. 常规实现:地址转换 因该 ...

  9. 优雅的vue.js

    优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...

  10. Sqoop的安装及简单使用

    SQOOP是用于对数据进行导入导出的. (1)把MySQL.Oracle等数据库中的数据导入到HDFS.Hive.HBase中   (2)把HDFS.Hive.HBase中的数据导出到MySQL.Or ...