Spring Boot學(xué)習(xí)筆記(四)構(gòu)建RESTful API標(biāo)準(zhǔn)工程實(shí)例

本文主要記錄搭建RESTful API標(biāo)準(zhǔn)工程,包含比較推薦的工程結(jié)構(gòu),掌握一些基本注解,并引入Swagger

新建一個(gè)項(xiàng)目

通過(guò)Spring Initializr創(chuàng)建工程,選擇所需要的jar包,如下圖:

圖1
圖2
圖3

工程結(jié)構(gòu)

Spring Boot框架對(duì)工程結(jié)構(gòu)并沒(méi)有什么特殊的限制,我這邊基本按照網(wǎng)上主流和自己一些喜好進(jìn)行劃分,供參考:

代碼層結(jié)構(gòu)
  • 前端控制器(Controller): com.xxx.controller
  • 數(shù)據(jù)服務(wù)層(Service): com.xxx.service
  • 實(shí)體(Entity)與數(shù)據(jù)訪問(wèn)層(Repository):com.xxx.domain
  • 公共方法及工具類: com.xxx.common
資源文件的結(jié)構(gòu)
  • 配置文件: src/main/resources/config
  • 靜態(tài)文件: src/main/resources/static
  • 模板: src/main/resources/templates
圖4

編寫第一個(gè)服務(wù)

controller下新建類HelloController,相關(guān)代碼做了簡(jiǎn)單的注釋,如下:

//相當(dāng)于 @Controller + @ResponseBody
//該注解 方法method 返回類型是String時(shí)候則返回string,返回對(duì)象時(shí)候則講json_encode 該對(duì)象的json字符串
@RestController
public class HelloController {
    //該注解mapping指定路由
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String SayHello() {
        return "Hello Spring Boot";
    }
}

編寫到這里,已經(jīng)可以直接編譯運(yùn)行了,這里值得注意的是被@SpringBootApplication注解的啟動(dòng)類一定要放在所有的RestController的根路徑的package下,@SpringBootApplication只會(huì)掃描@SpringBootApplication注解標(biāo)記類包下及其子包的類,如果不放在根路徑下,可以指定下:@SpringBootApplication(scanBasePackages = "com.example.api_demo")

無(wú)需配置Tomcat,直接啟動(dòng),輸入對(duì)應(yīng)的地址可看到結(jié)果:

圖5
圖6

增加service層

在搭建了基礎(chǔ)應(yīng)用的基礎(chǔ)上,我們?cè)黾觭ervice層抽離控制層和業(yè)務(wù)層代碼。

service下新增HelloServiceHelloServiceImpl兩個(gè)類,代碼如下:

//業(yè)務(wù)層接口:HelloService
public interface HelloService {
    public String sayHello();
}

//接口實(shí)現(xiàn):HelloServiceImpl
@Service
public class HelloServiceImpl  implements HelloService{
    @Override
    public String sayHello()
    {
        return "Hello Spring Boot";
    }
}

修改對(duì)應(yīng)的controller代碼:

@Autowired
private HelloService helloService;

@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String sayHello()
{
    return helloService.sayHello();
}

這樣,簡(jiǎn)單的拆分就完成了。

引入Swagger

Swagger是什么大家自行百度,對(duì)于Restful API來(lái)說(shuō),Swagger絕對(duì)是它的好基友。

首先引入對(duì)應(yīng)的jar包,在pom.xml加入:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.7.0</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.7.0</version>
</dependency>

新增類Swagger2.java,代碼如下:

@Configuration
@EnableSwagger2
public class Swagger2 {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.api_demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("測(cè)試文檔")
                .description("這里是一段描述")
                .termsOfServiceUrl("http://www.bug2048.com/")
                .version("1.0")
                .build();
    }
}

到這里,Swagger就算配置完成了,接下來(lái)就是要添加文檔內(nèi)容了,修改之前的HelloController之后,直接編譯運(yùn)行,通過(guò)/swagger-ui.html就能看到效果

@ApiOperation(value="增加Service層輸出Hello", notes="這是第二個(gè)demo")
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String sayHello()
{
    return helloService.sayHello();
}
圖7
圖8

至此,簡(jiǎn)單的框架算是完成了,后面就可以逐步完善,包括接入日志,數(shù)據(jù)庫(kù)等等,后面會(huì)持續(xù)更新。

總結(jié)

基于Spring Boot構(gòu)建RESTful API相對(duì)來(lái)說(shuō)還是比較便捷的,其中注解使得代碼更加簡(jiǎn)潔,本次用到注解再匯總下,有時(shí)間的話可以深入理解下其背后的原理:

  • @SpringBootApplication: 申明讓spring boot自動(dòng)給程序進(jìn)行必要的配置。
  • @RestController:REST風(fēng)格的控制器
  • @RequestMapping:提供路由信息,負(fù)責(zé)URL到Controller中的具體函數(shù)的映射
  • @Service:一般用于修飾service層的組件
  • @Autowired: 自動(dòng)導(dǎo)入依賴的bean
?著作權(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)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,284評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • 《Spring Boot開發(fā):從0到1》 大綱結(jié)構(gòu)v2.0 第一部分Spring Boot基礎(chǔ) 第1章 Sprin...
    光劍書架上的書閱讀 11,087評(píng)論 1 70
  • 心態(tài)決定了高度的不同,任何一種成功都需要積極的心態(tài),并且需要認(rèn)真學(xué)習(xí)每一種新的技巧!
    榮軍宇閱讀 110評(píng)論 0 0
  • “山無(wú)棱,江水為竭,冬雷震震,夏雨雪”金蛇郎君夏雪宜就如這詩(shī)句一般,是這世上最永恒不變規(guī)律的異變。他心思縝絕,又俊...
    風(fēng)尚資訊閱讀 361評(píng)論 0 0

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