前言
使用官方springboot-starter和第三方腳手架工具h(yuǎn)unter-spring-boot-starter,
快速構(gòu)建項(xiàng)目,在五分鐘內(nèi)即可進(jìn)行業(yè)務(wù)開發(fā)。
一、使用官方starter快速搭建一個(gè)項(xiàng)目
-
使用IDEA spring initializr 新建一個(gè)spring項(xiàng)目
image.png -
填寫一些基本信息
group: 組織,一般是域名倒寫
artifact:項(xiàng)目
image.png -
添加web支持
image.png 配置文件改名
在resource目錄下默認(rèn)生成的配置文件是application.properties,把他改成 application.yml
- 運(yùn)行
在項(xiàng)目下有一個(gè)唯一的java類,運(yùn)行這個(gè)main方法即可。 - 訪問
瀏覽器訪問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)目功能:
- 通用返回類Result
- 全局異常處理
- Jackson工具類
- StringUtil工具
- Redis工具類
- RestTemplate工具類
- 線程池自動(dòng)裝配
- swagger 自動(dòng)裝配
- DefaultWebMVC注解
- 包含的依賴
- Apache common-lang3
- common-lang
- lombok
- 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)用接口

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í),返回:

swagger支持
前面使用的postman,能夠調(diào)用實(shí)現(xiàn)restfulapi的調(diào)用,但是這樣每次都要自己填寫url和參數(shù)實(shí)屬麻煩,為此,本starter也實(shí)現(xiàn)了swagger2的自動(dòng)裝配。
- 引入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>
-
在application.yml配置基本信息
有兩個(gè)必配項(xiàng),其他為選配項(xiàng)。
必配項(xiàng): 1.enabled是否開啟swagger 2.base-package 掃描的包(一般配Controller所在包路徑即可)
image.png -
訪問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ù)如下

有幾個(gè)問題
- 接收到id與后端傳過來的不一樣,這是long類型精度丟失
- 時(shí)間格式不友好
解決方案
在啟動(dòng)類加上@DefaultWebMVC,無需其他操作,
此時(shí)再請(qǐng)求上述接口,返回的數(shù)據(jù)為:

@DefaultWebMVC注解功能總結(jié):
- json時(shí)間格式化 為yyyy-MM-dd HH:mm:ss
- 時(shí)區(qū)指定為GMT+8
- long類型自動(dòng)序列化為字符串,解決精度丟失問題。
- 其他在GitHub上查看詳細(xì)文檔
三、其他
到此項(xiàng)目初始化已經(jīng)完成,可馬上進(jìn)入業(yè)務(wù)開發(fā)了,還有內(nèi)置其他工具,如
JsonUtil、線程池、redisUtil、RestUtil、ftpUtil、StringUtil
這里就不再贅述,有興趣可以查看詳細(xì)文檔






