摘要:目標寫一套符合規范,并且具有風格的接口。你已會基于編寫接口。你已會使用接口調試工具。首先指明,我們的接口接收和返回的文檔格式。年畢業于阿壩師范學院計算機應用專業。現就職于深圳警圣技術股份有限公司,主要負責服務器接口開發工作。
寫在前面的話
這篇文章計劃是在過年期間完成的,示例代碼都寫好了,結果親戚來我家做客,文章沒來得及寫。已經很久沒有更新文章了,小伙伴們,有沒有想我啊。言歸正傳,下面開始,今天的話題。
目標寫一套符合規范,并且具有RESTful風格的API接口。
假定你已會使用Spring Boot 2.x。
你已會使用Gradle構建Spring Boot工程。
你已會基于Spring Boot編寫API接口。
你已會使用接口調試工具。
如果你還不會使用Spring Boot寫接口,建議先看一下這篇文章 :
用Spring Boot開發API接口
步驟1、基于Gradle構建Spring Boot示例項目。
2、引入JavaLib。
3、編寫接口代碼。
4、測試接口。
引入JavaLib測試版(SNAPSHOT),都會發布到 JitPack 上,所以,從這里拉取的,都會是最新的,但是需要配置倉庫地址。
正式版(RELEASE),才會推送到 Maven中央。
UserModel我們用UserModel來存放我們的數據,以便存取。我個人比較喜歡用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模塊為我們提供的方法。只需要調用 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; /** * 無參數構造方法 */ private BaseCodeMsg() {} /** * 構造方法 * @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 填充內容 * @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"); }
成功的標識是:當 code=0 時。
另外,我們還為你提供了預留字符串替換的方法。比如你想告訴用戶某個字段不合法,那么你可以這樣:
第一步:在CodeMsg中添加
public static final BaseCodeMsg ERROR_PARAM_ILLEGAL = BaseCodeMsg.app(20001, "Request Param Illegal : %s");
第二步:返回
/** * 測試參數錯誤 * @return {@link Result} */ @GetMapping("/test-param-error") public Result testParamError() { return Result.error(CodeMsg.ERROR_PARAM_ILLEGAL.fillArgs("account")); }
測試結果:
編寫接口代碼接下來,開始編寫我們的接口代碼。
首先指明,我們的接口接收和返回的文檔格式。
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(); } /** * 根據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、添加數據
看一下,數據是什么樣子
與我們預想的結果一樣。
獲取數據有數據樣式:
無數據樣式:
關于馮文議。
2017年畢業于阿壩師范學院計算機應用專業。
現就職于深圳警圣技術股份有限公司,主要負責服務器接口開發工作。
技術方向:Java。
開源軟件:JavaLib。
后記到這里就結束了,如果在遇到什么問題,或者有不明白的地方,可以通過評論、留言或者私信等方式,告訴我。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73368.html
摘要:今天給你們帶來集成的教程。接口返回結果不明確。這些痛點在前后端分離的大型項目上顯得尤為煩躁。接口返回結果非常明確,包括數據類型,狀態碼,錯誤信息等。生成后的文件依賴如下這里使用的是的版本。另外,關注之后在發送可領取免費學習資料。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 快過年了,不知道你們啥時候放年假,忙不忙。反正我是挺閑的,所以有時間寫 b...
摘要:認證鑒權與權限控制在微服務架構中的設計與實現一引言本文系認證鑒權與權限控制在微服務架構中的設計與實現系列的第一篇,本系列預計四篇文章講解微服務下的認證鑒權與權限控制的實現。 java 開源項目收集 平時收藏的 java 項目和工具 某小公司RESTful、共用接口、前后端分離、接口約定的實踐 隨著互聯網高速發展,公司對項目開發周期不斷縮短,我們面對各種需求,使用原有對接方式,各端已經很...
摘要:下一代服務端開發下一代服務端開發第部門快速開始第章快速開始環境準備,,快速上手實現一個第章企業級服務開發從到語言的缺點發展歷程的缺點為什么是產生的背景解決了哪些問題為什么是的發展歷程容器的配置地獄是什么從到下一代企業級服務開發在移動開發領域 《 Kotlin + Spring Boot : 下一代 Java 服務端開發 》 Kotlin + Spring Boot : 下一代 Java...
閱讀 2166·2023-04-26 00:43
閱讀 2686·2021-11-22 15:22
閱讀 3819·2021-11-11 16:55
閱讀 970·2021-11-04 16:06
閱讀 1789·2019-08-30 14:12
閱讀 1003·2019-08-30 14:02
閱讀 3371·2019-08-29 17:05
閱讀 1419·2019-08-29 12:27