国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實戰(zhàn):基于Spring Boot快速開發(fā)RESTful風(fēng)格API接口

tomener / 2143人閱讀

摘要:目標(biāo)寫一套符合規(guī)范,并且具有風(fēng)格的接口。你已會基于編寫接口。你已會使用接口調(diào)試工具。首先指明,我們的接口接收和返回的文檔格式。年畢業(yè)于阿壩師范學(xué)院計算機(jī)應(yīng)用專業(yè)。現(xiàn)就職于深圳警圣技術(shù)股份有限公司,主要負(fù)責(zé)服務(wù)器接口開發(fā)工作。

寫在前面的話

這篇文章計劃是在過年期間完成的,示例代碼都寫好了,結(jié)果親戚來我家做客,文章沒來得及寫。已經(jīng)很久沒有更新文章了,小伙伴們,有沒有想我啊。言歸正傳,下面開始,今天的話題。

目標(biāo)

寫一套符合規(guī)范,并且具有RESTful風(fēng)格的API接口。

假定

你已會使用Spring Boot 2.x。

你已會使用Gradle構(gòu)建Spring Boot工程。

你已會基于Spring Boot編寫API接口。

你已會使用接口調(diào)試工具。

如果你還不會使用Spring Boot寫接口,建議先看一下這篇文章 :

用Spring Boot開發(fā)API接口

步驟

1、基于Gradle構(gòu)建Spring Boot示例項目。

2、引入JavaLib。

3、編寫接口代碼。

4、測試接口。

引入JavaLib

測試版(SNAPSHOT),都會發(fā)布到 JitPack 上,所以,從這里拉取的,都會是最新的,但是需要配置倉庫地址。

正式版(RELEASE),才會推送到 Maven中央。

UserModel

我們用UserModel來存放我們的數(shù)據(jù),以便存取。我個人比較喜歡用bean的,如果你喜歡用Map,那也是可以的。不過需要注意的是,
需要加@JsonInclude(JsonInclude.Include.NON_NULL) ,他的作用是,如果某個字段為空時,在返回的JSON中,則不顯示,如果沒有,將為 null。

完整代碼如下:

package com.fengwenyi.demojavalibresult.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * User Model
 * @author Wenyi Feng
 * @since 2019-02-05
 */
@Data
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserModel implements Serializable {

    private static final long serialVersionUID = -835481508750383832L;

    /** UID */
    private String uid;

    /** Name */
    private String name;

    /** Age */
    private Integer age;

}
編寫接口返回碼

這里我們使用 JavaLib 中result模塊為我們提供的方法。只需要調(diào)用 BaseCodeMsg.app(Integer, String)即可。這里我們只寫幾個用作示例,完整代碼如下:

package com.fengwenyi.demojavalibresult.util;

import com.fengwenyi.javalib.result.BaseCodeMsg;

/**
 * 自定義返回碼以及描述信息
 * @author Wenyi Feng
 * @since 2019-02-05
 */
public class CodeMsg {

    /*
    user error
    ------------------------------------------------------------------------------------------------------------*/
    /** 用戶不存在 */
    public static final BaseCodeMsg ERROR_USER_NOT_EXIST = BaseCodeMsg.app(10001, "User Not Exist");

    /** UID不能為空 */
    public static final BaseCodeMsg ERROR_USER_UID_NOT_NULL = BaseCodeMsg.app(10002, "User UID Must Not null");

}
BaseCodeMsg

我們看一下源碼:

package com.fengwenyi.javalib.result;

/**
 * (基類)返回碼及描述信息
 * @author Wenyi Feng
 * @since 2019-01-22
 */
public class BaseCodeMsg {

    /** 返回碼 */
    private Integer code;

    /** 返回碼描述 */
    private String msg;

    /**
     * 無參數(shù)構(gòu)造方法
     */
    private BaseCodeMsg() {}

    /**
     * 構(gòu)造方法
     * @param code
     * @param msg
     */
    private BaseCodeMsg(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }


    public static BaseCodeMsg app(Integer code, String msg) {
        return new BaseCodeMsg(code, msg);
    }

    /**
     * 返回碼填充
     * @param args 填充內(nèi)容
     * @return CodeMsgEnum
     */
    public BaseCodeMsg fillArgs(Object ... args) {

        this.msg = String.format(this.msg, args);

        return this;
    }

    /**
     * 獲取返回碼
     * @return 返回碼
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 獲取描述信息
     * @return 描述信息
     */
    public String getMsg() {
        return msg;
    }

    /** 成功 */
    public static final BaseCodeMsg SUCCESS = BaseCodeMsg.app(0, "Success");

    /** 失敗 */
    public static final BaseCodeMsg ERROR_INIT = BaseCodeMsg.app(-1, "Error");
}

成功的標(biāo)識是:當(dāng) code=0 時。

另外,我們還為你提供了預(yù)留字符串替換的方法。比如你想告訴用戶某個字段不合法,那么你可以這樣:

第一步:在CodeMsg中添加

public static final BaseCodeMsg ERROR_PARAM_ILLEGAL = BaseCodeMsg.app(20001, "Request Param Illegal : %s");

第二步:返回

    /**
     * 測試參數(shù)錯誤
     * @return {@link Result}
     */
    @GetMapping("/test-param-error")
    public Result testParamError() {
        return Result.error(CodeMsg.ERROR_PARAM_ILLEGAL.fillArgs("account"));
    }

測試結(jié)果:

編寫接口代碼

接下來,開始編寫我們的接口代碼。

首先指明,我們的接口接收和返回的文檔格式。

consumes = MediaType.APPLICATION_JSON_UTF8_VALUE
produces = MediaType.APPLICATION_JSON_UTF8_VALUE

再使用 JavaLib 中 Result。完整代碼如下:

package com.fengwenyi.demojavalibresult.controller;

import com.fengwenyi.demojavalibresult.model.UserModel;
import com.fengwenyi.demojavalibresult.util.CodeMsg;
import com.fengwenyi.javalib.result.Result;
import org.springframework.http.MediaType;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * User Controller : 用戶操作
 * @author Wenyi Feng
 * @since 2019-02-05
 */
@RestController
@RequestMapping(value = "/user",
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class UserController {

    /** 臨時存放用戶信息 */
    private List userModelList = new ArrayList<>();

    /**
     * 初始化用戶
     */
    @PostConstruct
    public void init() {
        for (int i = 0; i < 10; i++)
            userModelList.add(new UserModel().setUid(UUID.randomUUID().toString()).setName("u" + i).setAge(10 + i));
    }

    /**
     * 查詢用戶列表
     * @return {@link Result}
     */
    @GetMapping("/list")
    public Result list() {
        return Result.success(userModelList);
    }

    /**
     * 添加用戶
     * @param userModel 這里傳JSON字符串
     * @return {@link Result}
     */
    @PostMapping("/add")
    public Result add(@RequestBody UserModel userModel) {
        if (userModel != null) {
            userModelList.add(userModel.setUid(UUID.randomUUID().toString()));
            return Result.success();
        }
        return Result.error();
    }

    /**
     * 根據(jù)UID獲取用戶
     * @param uid UID
     * @return {@link Result}
     */
    @GetMapping("/get/{uid}")
    public Result getByUid(@PathVariable("uid") String uid) {
        if (StringUtils.isEmpty(uid))
            return Result.error(CodeMsg.ERROR_USER_UID_NOT_NULL);
        for (UserModel userModel : userModelList)
            if (userModel.getUid().equals(uid))
                return Result.success(userModel);
        return Result.error(CodeMsg.ERROR_USER_NOT_EXIST);
    }

}
測試

1、啟動

2、list

訪問:http://localhost:8080/user/list

{
    "code": 0,
    "msg": "Success",
    "data": [
        {
            "uid": "d8e2dfac-b6e8-46c7-9d43-5bb6bf99ce30",
            "name": "u0",
            "age": 10
        },
        {
            "uid": "87001637-9f21-4bc7-b589-bea1b2c795c4",
            "name": "u1",
            "age": 11
        },
        {
            "uid": "5e1398ca-8322-4a68-b0d2-1eb4c1cac9de",
            "name": "u2",
            "age": 12
        },
        {
            "uid": "e6ee5452-4148-4f6d-b820-9cc24e5c91b5",
            "name": "u3",
            "age": 13
        },
        {
            "uid": "3f428e26-57e1-4661-8275-ce3777b5da54",
            "name": "u4",
            "age": 14
        },
        {
            "uid": "b9d994b4-f090-40de-b0f3-e89c613061f2",
            "name": "u5",
            "age": 15
        },
        {
            "uid": "748d1349-5978-4746-b0c1-949eb5613a28",
            "name": "u6",
            "age": 16
        },
        {
            "uid": "abaadb7c-23fb-4297-a531-0c490927f6d5",
            "name": "u7",
            "age": 17
        },
        {
            "uid": "5e5917a1-8674-4367-94c6-6a3fd10a08d6",
            "name": "u8",
            "age": 18
        },
        {
            "uid": "03ed6a83-0cc0-4714-9d0d-f653ebb3a2eb",
            "name": "u9",
            "age": 19
        }
    ]
}

2、添加數(shù)據(jù)

看一下,數(shù)據(jù)是什么樣子

與我們預(yù)想的結(jié)果一樣。

獲取數(shù)據(jù)

有數(shù)據(jù)樣式:

無數(shù)據(jù)樣式:

關(guān)于

馮文議。

2017年畢業(yè)于阿壩師范學(xué)院計算機(jī)應(yīng)用專業(yè)。

現(xiàn)就職于深圳警圣技術(shù)股份有限公司,主要負(fù)責(zé)服務(wù)器接口開發(fā)工作。

技術(shù)方向:Java。

開源軟件:JavaLib。

后記

到這里就結(jié)束了,如果在遇到什么問題,或者有不明白的地方,可以通過評論、留言或者私信等方式,告訴我。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73368.html

相關(guān)文章

  • SpringBoot 實戰(zhàn) (五) | 集成 Swagger2 構(gòu)建強(qiáng)大的 RESTful API

    摘要:今天給你們帶來集成的教程。接口返回結(jié)果不明確。這些痛點(diǎn)在前后端分離的大型項目上顯得尤為煩躁。接口返回結(jié)果非常明確,包括數(shù)據(jù)類型,狀態(tài)碼,錯誤信息等。生成后的文件依賴如下這里使用的是的版本。另外,關(guān)注之后在發(fā)送可領(lǐng)取免費(fèi)學(xué)習(xí)資料。 微信公眾號:一個優(yōu)秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 快過年了,不知道你們啥時候放年假,忙不忙。反正我是挺閑的,所以有時間寫 b...

    Rindia 評論0 收藏0
  • Spring Web

    摘要:認(rèn)證鑒權(quán)與權(quán)限控制在微服務(wù)架構(gòu)中的設(shè)計與實現(xiàn)一引言本文系認(rèn)證鑒權(quán)與權(quán)限控制在微服務(wù)架構(gòu)中的設(shè)計與實現(xiàn)系列的第一篇,本系列預(yù)計四篇文章講解微服務(wù)下的認(rèn)證鑒權(quán)與權(quán)限控制的實現(xiàn)。 java 開源項目收集 平時收藏的 java 項目和工具 某小公司RESTful、共用接口、前后端分離、接口約定的實踐 隨著互聯(lián)網(wǎng)高速發(fā)展,公司對項目開發(fā)周期不斷縮短,我們面對各種需求,使用原有對接方式,各端已經(jīng)很...

    Kosmos 評論0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā)

    摘要:下一代服務(wù)端開發(fā)下一代服務(wù)端開發(fā)第部門快速開始第章快速開始環(huán)境準(zhǔn)備,,快速上手實現(xiàn)一個第章企業(yè)級服務(wù)開發(fā)從到語言的缺點(diǎn)發(fā)展歷程的缺點(diǎn)為什么是產(chǎn)生的背景解決了哪些問題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級服務(wù)開發(fā)在移動開發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開發(fā) 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 評論0 收藏0

發(fā)表評論

0條評論

tomener

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<