使用第三方strater快速搭建一個(gè)企業(yè)springboot應(yīng)用

前言

使用官方springboot-starter和第三方腳手架工具h(yuǎn)unter-spring-boot-starter,
快速構(gòu)建項(xiàng)目,在五分鐘內(nèi)即可進(jìn)行業(yè)務(wù)開發(fā)。


一、使用官方starter快速搭建一個(gè)項(xiàng)目

  1. 使用IDEA spring initializr 新建一個(gè)spring項(xiàng)目


    image.png
  2. 填寫一些基本信息
    group: 組織,一般是域名倒寫
    artifact:項(xiàng)目


    image.png
  3. 添加web支持


    image.png
  4. 配置文件改名
    在resource目錄下默認(rèn)生成的配置文件是application.properties,把他改成 application.yml

  1. 運(yùn)行
    在項(xiàng)目下有一個(gè)唯一的java類,運(yùn)行這個(gè)main方法即可。
  2. 訪問
    瀏覽器訪問http://localhost:8080/出現(xiàn)404項(xiàng)目運(yùn)行成功

二、使用第三方starter完善

springboot已經(jīng)大量簡(jiǎn)化了xml配置,但如果想進(jìn)入業(yè)務(wù)的開發(fā),還有些許配置要做,還要引入一些必備的工具類等,因此在springboot的基礎(chǔ)上,hunter-spring-boot-starter又做了一些提供了一些常用工具和自動(dòng)裝配,使你馬上進(jìn)入業(yè)務(wù)開發(fā)階段。
具體查看詳細(xì)文檔

  • 項(xiàng)目功能:
  1. 通用返回類Result
  2. 全局異常處理
  3. Jackson工具類
  4. StringUtil工具
  5. Redis工具類
  6. RestTemplate工具類
  7. 線程池自動(dòng)裝配
  8. swagger 自動(dòng)裝配
  9. DefaultWebMVC注解
  • 包含的依賴
  1. Apache common-lang3
  2. common-lang
  3. lombok
  4. OKhttp

在pom引入jar包

<dependency>
       <groupId>com.github.gxhunter</groupId>
       <artifactId>hunter-spring-boot-starter</artifactId>
       <version>0.5</version>
</dependency>

使用內(nèi)置的通用返回類Result

在企業(yè)后端開發(fā)中,Controller一般有一個(gè)通用類result,
hunter-spring-boot-starter提供了一個(gè)通用返回類實(shí)踐,所有的Controller都使用這個(gè)類作為返回值。
示例Controller

@RestController
public class IndexController{
    @GetMapping("index")
    public Result index(){
        return Result.success("請(qǐng)求首頁成功");
    }
}

使用postman調(diào)用接口


image.png

Result字段描述

字段 類型 描述
status int 狀態(tài)碼
message string 返回信息
data T 攜帶數(shù)據(jù)
success boolean 是否成功

靜態(tài)方法

除了上述的Result.success(Obj)用于返回成功,并攜帶Obj數(shù)據(jù),Result還提供了其他的靜態(tài)方法

方法名稱 描述
success(T data) 成功并返回?cái)?shù)據(jù)
success() 成功不攜帶數(shù)據(jù)
successMsg(String msg) 成功并返回信息
failed(String str) 失敗,并提示信息,code使用默認(rèn)
failed(T data,IErrorCode code) 失敗,攜帶數(shù)據(jù)和提示信息和code
failed(T data,String message) 失敗,并攜帶數(shù)據(jù)和提示信息
failed() 失敗,不攜帶信息

返回碼對(duì)照表

遵循COC原則,內(nèi)置了幾個(gè)返回碼枚舉,你也可以實(shí)現(xiàn)IResponseCode.java自定義擴(kuò)展
內(nèi)置的返回碼枚舉在com.github.gxhunter.enums.ResultEnum

返回碼 描述
0 成功
1 查詢不到任何內(nèi)容
2 新建失敗
3 修改失敗
4 刪除失敗
1000 操作失?。ㄒ话闶菕伋龇?wù)端手段throw ApiException)
1001 參數(shù)校驗(yàn)失敗
1999 網(wǎng)絡(luò)超時(shí)(上述之外的其他異常)

使用內(nèi)置的異常處理器

無需任何配置,默認(rèn)開啟了異常處理器,分類捕獲了ApiException、MethodArgumentNotValidException、Exception三種異常(可自行擴(kuò)展)
查看如下實(shí)例代碼

    @PostMapping("/error")
    public void error(){
        int a = 1/0;
    }

    @PostMapping("/apierror")
    public void apiError(){
//        模擬數(shù)據(jù)庫操作失敗
        throw new ApiException("數(shù)據(jù)關(guān)聯(lián)失敗");
    }
  • 請(qǐng)求 /error 接口,拋出的異常沒做分類處理,返回status為1999,提示信息是網(wǎng)超時(shí)


  • 請(qǐng)求 /apierror 拋出的異常是ApiException,在異常處理器有做分類,返回結(jié)果如下


    image.png
  • 參數(shù)校驗(yàn)失敗異常
    如下一個(gè)實(shí)體類person,注解限制了name字段不能為null
@Data
public class Person{
    @NotNull
    private String name;
    private long age;
}

對(duì)應(yīng)Controller如下:

    @PutMapping("/verify")
    public Result<Person> verifyPerson(@RequestBody@Valid Person person){
        return Result.success(person);
    }

@Valid表示開啟校驗(yàn),這個(gè)注解必須要加

前端傳入的name字段為空時(shí),返回:

image.png

swagger支持

前面使用的postman,能夠調(diào)用實(shí)現(xiàn)restfulapi的調(diào)用,但是這樣每次都要自己填寫url和參數(shù)實(shí)屬麻煩,為此,本starter也實(shí)現(xiàn)了swagger2的自動(dòng)裝配。

  1. 引入swagger2包
<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
  1. 在application.yml配置基本信息
    有兩個(gè)必配項(xiàng),其他為選配項(xiàng)。
    必配項(xiàng): 1.enabled是否開啟swagger 2.base-package 掃描的包(一般配Controller所在包路徑即可)


    image.png
  2. 訪問swagger
    重啟項(xiàng)目,訪問http://localhost:8080/swagger-ui.html
    顯示如下界面,swagger就配置成功啦。

    image.png

@DefaultWebMVC注解

默認(rèn)情況下,java序列化過程有許多坑,這個(gè)注解就是為解決這些坑而生。

場(chǎng)景

有如下一個(gè)類

@Data
public class Person{
    private long id;
    @NotNull
    private String name;
    private long age;
    private Date birthday;
    private LocalDateTime registerTime;
}

在Controller中,新增一個(gè)接口

    @GetMapping("/getPerson")
    public Result getPerson(){
        Person person = new Person();
        person.setId(12345678912233L);
        person.setBirthday(new Date());
        person.setRegisterTime(LocalDateTime.now());
        return Result.success(person);
    }

結(jié)果前端請(qǐng)求到的數(shù)據(jù)如下


image.png

有幾個(gè)問題

  1. 接收到id與后端傳過來的不一樣,這是long類型精度丟失
  2. 時(shí)間格式不友好

解決方案

在啟動(dòng)類加上@DefaultWebMVC,無需其他操作,
此時(shí)再請(qǐng)求上述接口,返回的數(shù)據(jù)為:


image.png

@DefaultWebMVC注解功能總結(jié):

  1. json時(shí)間格式化 為yyyy-MM-dd HH:mm:ss
  2. 時(shí)區(qū)指定為GMT+8
  3. long類型自動(dòng)序列化為字符串,解決精度丟失問題。
  4. 其他在GitHub上查看詳細(xì)文檔

三、其他

到此項(xiàng)目初始化已經(jīng)完成,可馬上進(jìn)入業(yè)務(wù)開發(fā)了,還有內(nèi)置其他工具,如
JsonUtil、線程池、redisUtil、RestUtil、ftpUtil、StringUtil
這里就不再贅述,有興趣可以查看詳細(xì)文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容