前后端分離的項目,接口文檔的存在十分重要。與手動編寫接口文檔不同,swagger是一個自動生成接口文檔的工具,在需求不斷變更的環境下,手動編寫文檔的效率實在太低。與新版的swagger3相比swagger2配置更少,使用更加方便。
1685頁 Java面試突擊核心講
一、pom文件中引入Swagger3依賴
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
二、Application上面加入@EnableOpenApi注解
@EnableOpenApi
@SpringBootApplication
@MapperScan(basePackages = {"cn.ruiyeclub.dao"})
public class Swagger3Application {public static void main(String[] args) {SpringApplication.run(Swagger3Application.class, args);}
三、Swagger3Config的配置
@Configuration
public class Swagger3Config {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Swagger3接口文檔").description("更多請咨詢服務開發者Ray。").contact(new Contact("Ray。", "http://www.ruiyeclub.cn", "ruiyeclub@foxmail.com")).version("1.0").build();}
}
四、Swagger注解的使用說明
@Api:用在請求的類上,表示對類的說明tags="說明該類的作用,可以在UI界面上看到的注解"value="該參數沒什么意義,在UI界面上也看到,所以不需要配置"@ApiOperation:用在請求的方法上,說明方法的用途、作用value="說明方法的用途、作用"notes="方法的備注說明"@ApiImplicitParams:用在請求的方法上,表示一組參數說明@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一個請求參數的各個方面name:參數名value:參數的漢字說明、解釋required:參數是否必須傳paramType:參數放在哪個地方· header --> 請求參數的獲取:@RequestHeader· query --> 請求參數的獲取:@RequestParam· path(用于restful接口)--> 請求參數的獲取:@PathVariable· body(不常用)· form(不常用) dataType:參數類型,默認String,其它值dataType="Integer" defaultValue:參數的默認值@ApiResponses:用在請求的方法上,表示一組響應@ApiResponse:用在@ApiResponses中,一般用于表達一個錯誤的響應信息code:數字,例如400message:信息,例如"請求參數沒填好"response:拋出異常的類@ApiModel:用于響應類上,表示一個返回響應數據的信息(這種一般用在post創建的時候,使用@RequestBody這樣的場景,請求參數無法使用@ApiImplicitParam注解進行描述的時候)@ApiModelProperty:用在屬性上,描述響應類的屬性
Controller層的配置:
@Api(tags = "用戶信息管理")
@RestController
@RequestMapping("userRecord")
public class UserRecordController extends ApiController {/*** 服務對象*/@Resourceprivate UserRecordService userRecordService;/*** 分頁查詢所有數據* @param page 分頁對象* @param userRecord 查詢實體* @return 所有數據*/@ApiOperation("分頁查詢所有數據")@GetMapping("page")public R selectAll(Page<UserRecord> page, UserRecord userRecord) {return success(this.userRecordService.page(page, new QueryWrapper<>(userRecord)));}/*** 通過主鍵查詢單條數據* @param id 主鍵* @return 單條數據*/@ApiOperation("通過主鍵查詢單條數據")@GetMapping("{id}")public R selectOne(@PathVariable Serializable id) {return success(this.userRecordService.getById(id));}/*** 新增數據* @param userRecord 實體對象* @return 新增結果*/@ApiOperation("新增數據")@PostMapping("insert")public R insert(@RequestBody UserRecord userRecord) {return success(this.userRecordService.save(userRecord));}/*** 修改數據* @param userRecord 實體對象* @return 修改結果*/@ApiOperation("修改數據")@PutMapping("update")public R update(@RequestBody UserRecord userRecord) {return success(this.userRecordService.updateById(userRecord));}/*** 刪除數據* @param idList 主鍵結合* @return 刪除結果*/@ApiOperation("刪除數據")@DeleteMapping("delete")public R delete(@RequestParam("idList") List<Long> idList) {return success(this.userRecordService.removeByIds(idList));}
}
五、Swagger界面效果
Swagger的訪問路徑由port/swagger-ui.html改成了port/swagger-ui/ 或port/swagger-ui/index.html,項目演示代碼在springboot-swagger
如果這篇文章對你有幫助的話,記得給我點贊關注走一波,你的鼓勵是對我最大的支持!謝謝。
1685頁 Java面試突擊核心講