【swagger3.0】swagger3.0配置与使用

maven:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

新建一个swagger的配置类

@EnableOpenApi
@ApiIgnore
@Controller
public class SwaggerConfig implements WebMvcConfigurer {

    private final String baseUrl;

    public SwaggerConfig(
            @Value("${springfox.documentation.swagger-ui.base-url:}") String baseUrl) {
        this.baseUrl = baseUrl;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        String baseUrl = StringUtils.trimTrailingCharacter(this.baseUrl, '/');
        registry.
                addResourceHandler(baseUrl + "/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController(baseUrl + "/swagger-ui/")
                .setViewName("forward:" + baseUrl + "/swagger-ui/index.html");
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
//        registry
//                .addMapping("/api/pet")
//                .allowedOrigins("http://editor.swagger.io");
//        registry
//                .addMapping("/v2/api-docs.*")
//                .allowedOrigins("http://editor.swagger.io");
    }

    @GetMapping(value = "/")
    @Operation(hidden = true)
    public ModelAndView home() {
        return new ModelAndView("redirect:/swagger-ui/index.html");
    }
}

说明:
swagger3 摒弃了@EnableSwagger2这个注解,改成了@EnableOpenApi

对应在controller里也有修改

这里我放一个示例

@RestController
@Tag(name = "TAT",description = "就是这么牛逼")
public class TaTController {

    @GetMapping("/hello/{id}")
    @Operation(summary = "Find by ID",
            tags = {"TAT"},
            description = "I am testing TAT ,find by Id return TAT")
    public Resp findById(@Parameter(name = "id",description = "id斯巴拉西")@PathVariable Integer id,
                        @Parameter(description = "随便干什么") @RequestParam String sss){
        return Resp.ok(TAT.builder().code(20L).name("3").some(Stream.of("2","3").collect(Collectors.toList())).build());
    }

    @PostMapping("/hello_post/{id}")
    @Operation(summary = "Find by ID",
            tags = {"TAT"},
            responses = { @ApiResponse(description = "xxxx",content = {@Content(examples = {@ExampleObject()},mediaType = "application/json",schema=@Schema(implementation=TAT.class ))}) },
            description = "I am testing TAT ,find by Id return Map")

    public Resp post(@Parameter(name = "id",description = "id斯巴拉西")@PathVariable Integer id,
                    @Parameter(description = "随便干什么",required = false) @RequestParam String sss,
                    @RequestBody TAT tat){
        return Resp.ok(TAT.builder().code(20L).name("3").some(Stream.of("2","3").collect(Collectors.toList())).build());
    }

}

说明:
@Tag取代了原来的@Api
@Operation取代了原来的@ApiOperation,里面的tags表示此方法可以放到哪个Tag里,如果没有Tag,则默认建一个
@ApiIgnore 表示隐藏API,不会被sawgger展示出来

实体类

@Schema(name="TAT", description="TAT of Schema",title = "TAT_title")
public class TAT {

    @Schema(name="name", description="name of Schema",allowableValues = {"wang","li"})
    private String name;
    private Long code;
    @Schema(hidden = true)
    private List<String> some;
}

则是使用@Schema取代了原来的@ApiModel@ApiModelProperty

posted @ 2021-09-14 10:17  自律のalive  阅读(4457)  评论(0编辑  收藏  举报