前言
使用官方springboot-starter和第三方腳手架工具hunter-spring-boot-starter,
快速構建項目,在五分鍾內即可進行業務開發。
一、使用官方starter快速搭建一個項目
使用IDEA spring initializr 新建一個spring項目
填寫一些基本信息
group: 組織,一般是域名倒寫
artifact:項目
添加web支持
配置文件改名
在resource目錄下默認生成的配置文件是application.properties,把他改成 application.yml運行
在項目下有一個唯一的java類,運行這個main方法即可。- 訪問
瀏覽器訪問http://localhost:8080/
出現404項目運行成功
二、使用第三方starter完善
springboot已經大量簡化了xml配置,但如果想進入業務的開發,還有些許配置要做,還要引入一些必備的工具類等,因此在springboot的基礎上,hunter-spring-boot-starter又做了一些提供了一些常用工具和自動裝配,使你馬上進入業務開發階段。
具體查看詳細文檔
- 項目功能:
- 通用返回類Result
- 全局異常處理
- Jackson工具類
- StringUtil工具
- Redis工具類
- RestTemplate工具類
- 線程池自動裝配
- swagger 自動裝配
- 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>
使用內置的通用返回類Result
在企業后端開發中,Controller一般有一個通用類result,
hunter-spring-boot-starter提供了一個通用返回類實踐,所有的Controller都使用這個類作為返回值。
示例Controller
@RestController
public class IndexController{
@GetMapping("index")
public Result index(){
return Result.success("請求首頁成功");
}
}
使用postman調用接口
Result字段描述
字段 | 類型 | 描述 |
---|---|---|
status | int | 狀態碼 |
message | string | 返回信息 |
data | T | 攜帶數據 |
success | boolean | 是否成功 |
靜態方法
除了上述的Result.success(Obj)用於返回成功,並攜帶Obj數據,Result還提供了其他的靜態方法
方法名稱
描述
success(T data)
成功並返回數據
success()
成功不攜帶數據
successMsg(String msg)
成功並返回信息
failed(String str)
失敗,並提示信息,code使用默認
failed(T data,IErrorCode code)
失敗,攜帶數據和提示信息和code
failed(T data,String message)
失敗,並攜帶數據和提示信息
failed()
失敗,不攜帶信息
方法名稱 | 描述 |
---|---|
success(T data) | 成功並返回數據 |
success() | 成功不攜帶數據 |
successMsg(String msg) | 成功並返回信息 |
failed(String str) | 失敗,並提示信息,code使用默認 |
failed(T data,IErrorCode code) | 失敗,攜帶數據和提示信息和code |
failed(T data,String message) | 失敗,並攜帶數據和提示信息 |
failed() | 失敗,不攜帶信息 |
返回碼對照表
遵循COC原則,內置了幾個返回碼枚舉,你也可以實現IResponseCode.java
自定義擴展
內置的返回碼枚舉在com.github.gxhunter.enums.ResultEnum
返回碼 | 描述 |
---|---|
0 | 成功 |
1 | 查詢不到任何內容 |
2 | 新建失敗 |
3 | 修改失敗 |
4 | 刪除失敗 |
1000 | 操作失敗(一般是拋出服務端手段throw ApiException) |
1001 | 參數校驗失敗 |
1999 | 網絡超時(上述之外的其他異常) |
使用內置的異常處理器
無需任何配置,默認開啟了異常處理器,分類捕獲了ApiException、MethodArgumentNotValidException、Exception三種異常(可自行擴展)
查看如下實例代碼
@PostMapping("/error")
public void error(){
int a = 1/0;
}
@PostMapping("/apierror")
public void apiError(){
// 模擬數據庫操作失敗
throw new ApiException("數據關聯失敗");
}
- 請求 /error 接口,拋出的異常沒做分類處理,返回status為1999,提示信息是網超時
- 請求 /apierror 拋出的異常是ApiException,在異常處理器有做分類,返回結果如下
- 參數校驗失敗異常
如下一個實體類person,注解限制了name字段不能為null
@Data
public class Person{
@NotNull
private String name;
private long age;
}
對應Controller如下:
@PutMapping("/verify")
public Result<Person> verifyPerson(@RequestBody@Valid Person person){
return Result.success(person);
}
@Valid表示開啟校驗,這個注解必須要加
前端傳入的name字段為空時,返回:
swagger支持
前面使用的postman,能夠調用實現restfulapi的調用,但是這樣每次都要自己填寫url和參數實屬麻煩,為此,本starter也實現了swagger2的自動裝配。
- 引入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配置基本信息
有兩個必配項,其他為選配項。
必配項: 1.enabled是否開啟swagger 2.base-package 掃描的包(一般配Controller所在包路徑即可)
訪問swagger
重啟項目,訪問http://localhost:8080/swagger-ui.html
顯示如下界面,swagger就配置成功啦。
@DefaultWebMVC注解
默認情況下,java序列化過程有許多坑,這個注解就是為解決這些坑而生。
場景
有如下一個類
@Data
public class Person{
private long id;
@NotNull
private String name;
private long age;
private Date birthday;
private LocalDateTime registerTime;
}
在Controller中,新增一個接口
@GetMapping("/getPerson")
public Result getPerson(){
Person person = new Person();
person.setId(12345678912233L);
person.setBirthday(new Date());
person.setRegisterTime(LocalDateTime.now());
return Result.success(person);
}
結果前端請求到的數據如下
有幾個問題
- 接收到id與后端傳過來的不一樣,這是long類型精度丟失
- 時間格式不友好
解決方案
在啟動類加上@DefaultWebMVC,無需其他操作,
此時再請求上述接口,返回的數據為:
@DefaultWebMVC注解功能總結:
- json時間格式化 為yyyy-MM-dd HH:mm:ss
- 時區指定為GMT+8
- long類型自動序列化為字符串,解決精度丟失問題。
- 其他在GitHub上查看詳細文檔
三、其他
到此項目初始化已經完成,可馬上進入業務開發了,還有內置其他工具,如
JsonUtil、線程池、redisUtil、RestUtil、ftpUtil、StringUtil
這里就不再贅述,有興趣可以查看詳細文檔