接口開發-基於SpringBoot建立基礎框架

說到接口開發,能想到的開發語言有不少種,像什麼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;
    }
}

  

好了,基礎工程完活。

相關文章
相關標籤/搜索