解決springboot引入swagger2不生效問題

今天遇到跟同事遇到一個由於失誤導致的問題,也可以說比較難發現瞭.在此記錄一下(我們用的springboot是2.0.3,swagger是2.2.2)

問題描述:

swagger修改title,description等都不生效。並且啟動springboot,沒有有去加載swagger的配置類。(在debug模式啟動)

經過不斷的查找,發現瞭原因是:swagger的配置類的註解加錯瞭。@Configuration不小心寫成瞭@Configurable.

還有就是@EnableSwagger2註解隻需要加在swagger配置類上

springboot引入swagger2的步驟:

①引入依賴

<!--  引入swagger包 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>

②編寫Swagger2的配置類

@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(getApiInfo())
                .select()
               .apis(RequestHandlerSelectors.basePackage("com.xx.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo getApiInfo(){
        return new ApiInfoBuilder()
                .title("Swagger2....")
                .description("Swagger2")
                .version("1.0")
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }
}

③在controller中添加註解:按需添加註解

@Controller
@RequestMapping("/user")
@Api(tags = "我的接口模塊")
public class UserController {
    @Autowired
    private UserService userService;
	//註意這個註解跟請求對應的@XxxMapping,要不然這個接口會生成好多方法
    @GetMapping(value = "/getUserById")
    @ResponseBody
    @ApiOperation(value = "根據ID查詢User")
    public User getUserById(@RequestParam(value = "id") int id){
        return userService.getUserById(id);
    }
}

④在model(pojo)上加註解,按需添加

@ApiModel(value = "用戶對象")
public class User {
    @ApiModelProperty(value = "用戶ID", name = "userId")
    private Integer userId;
    @ApiModelProperty(value = "用戶姓名",name = "userName")
    private String userName;
    @ApiModelProperty(value = "用戶密碼",name = "password")
    private String password;
    @ApiModelProperty(value = "用戶手機號",name = "phone")
    private String phone;

一些註解的使用

@Api:一般用於Controller中,用於接口分組

@ApiOperation:接口說明,用於api方法上。

@ApiImplicitParams:用在方法上包含一組參數說明

@ApiImplicitParam:用在@ApiImplicitParams註解中,指定一個請求參數的各個方面

paramType:參數放在哪個地方

header 請求參數的獲取:@RequestHeader

query 請求參數的獲取:@RequestParam

path(用於restful接口) 請求參數的獲取:@PathVariable

body(不常用)

form(不常用)

name:參數名

dataType:參數類型

required:參數是否必須傳

value:參數的意思

defaultValue:參數的默認值

@ApiResponses:用於表示一組響應

@ApiResponse:用在@ApiResponses中,一般用於表達一個錯誤的響應信息

code:數字,例如400

message:信息,例如”請求參數沒填好”

response:拋出異常的類

@ApiModel:描述一個Model的信息(這種一般用在post創建的時候,使用@RequestBody這樣的場景,請求參數無法使用@ApiImplicitParam註解進行描述的時候)表明這是一個被swagger框架管理的model,用於class上

@ApiModelProperty :使用在實體類上的成員變量上,描述成員變量的含義。

以上就是解決springboot引入swagger2不生效問題的詳細內容,更多關於springboot引入swagger2的資料請關註WalkonNet其它相關文章!

推薦閱讀: