首頁 > 軟體

解決springboot引入swagger2不生效問題

2022-05-17 10:00:27

今天遇到跟同事遇到一個由於失誤導致的問題,也可以說比較難發現了.在此記錄一下(我們用的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:資訊&#xff0c;例如”請求引數沒填好”

response:丟擲異常的類

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

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

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


IT145.com E-mail:sddin#qq.com