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

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

一、创建基础工程

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

spring boot api 开发 spring boot 接口开发_java

 

spring boot api 开发 spring boot 接口开发_java_02

 

spring boot api 开发 spring boot 接口开发_spring_03

spring boot api 开发 spring boot 接口开发_spring boot api 开发_04

spring boot api 开发 spring boot 接口开发_spring boot_05

 

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

二. 创建项目目录

 

spring boot api 开发 spring boot 接口开发_spring boot_06

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

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

三、接下来写个样例

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 ! 

spring boot api 开发 spring boot 接口开发_spring_07

spring boot api 开发 spring boot 接口开发_API接口_08

几个重要的基类

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

  

好了,基础工程完活。