暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Swagger笔记(二)springboot集成和ApiModel使用不当的一个小问题

生活不止眼前的代码 2019-07-30
655

网页浏览地址

https://blog.csdn.net/yingziisme/article/details/97699565

swagger现在已经是主流api工具了,特别是前后端分离的开发模式的流行,基本上都会用它来生成接口文档

swagger官网

https://swagger.io/

使用springboot来集成swagger也比较简单

首先在pom文件中引入相关的包

  1. <dependency>

  2. <groupId>io.springfox</groupId>

  3. <artifactId>springfox-swagger-ui</artifactId>

  4. <version>2.7.0</version>

  5. </dependency>

  6. <dependency>

  7. <groupId>io.springfox</groupId>

  8. <artifactId>springfox-swagger2</artifactId>

  9. <version>2.7.0</version>

  10. </dependency>

然后在启动类上加个注解,启动swagger

  1. @EnableSwagger2

  2. @SpringBootApplication

  3. public class SpringCloudUploadSwaggerDemoApplication {

  4. public static void main(String[] args) {

  5. SpringApplication.run(SpringCloudUploadSwaggerDemoApplication.class, args);

  6. }

  7. }

再配置相应的bean

  1. @Configuration

  2. public class SwaggerConfig {


  3. @Bean

  4. public Docket api() {

  5. return new Docket(DocumentationType.SWAGGER_2)

  6. .apiInfo(apiInfo())

  7. .select()

  8. // 扫描的包路径

  9. .apis(RequestHandlerSelectors.basePackage("com.mt.demo.upload.swagger.controller"))

  10. .paths(PathSelectors.any())

  11. .build();

  12. }

  13. // 一些说明配置

  14. private ApiInfo apiInfo() {

  15. return new ApiInfoBuilder()

  16. .title("api文档")

  17. .description("swagger接口")

  18. .version("1.0")

  19. .contact(new Contact("yingzi", "https://blog.csdn.net/yingziisme", "https://blog.csdn.net/yingziisme"))

  20. .build();

  21. }

  22. }

然后就可以在相应的包下面的controller上使用相关的注解

controller层代码注解

  1. @Slf4j

  2. @RestController

  3. @RequestMapping("/two")

  4. @Api("ChapterTwo")

  5. public class ChapterTwo {


  6. @ApiOperation(value = "two", notes = "two", httpMethod = "POST")

  7. @PostMapping("/post")

  8. public ResultVO post(@Valid @RequestBody OneDTO oneDTO){

  9. return ResultVO.success(oneDTO);

  10. }


  11. @ApiOperation(value = "two", notes = "two", httpMethod = "POST")

  12. @PostMapping("/post1")

  13. public ResultVO post(@Valid @RequestBody TwoDTO oneDTO){

  14. return ResultVO.success(oneDTO);

  15. }

  16. }

相关的实体类注解

  1. @Data

  2. @ApiModel("One")

  3. public class OneDTO {

  4. private String user;

  5. private String password;

  6. }

  1. @Data

  2. @ApiModel("One")

  3. public class TwoDTO {

  4. private String mobile;

  5. private String email;

  6. }

然后这样就发现了一个坑

原来ApiModel使用了同样的值,会导致里面的属性叠加到了一起

一开始没有注意到是有两个实体类的ApiModel的值一样,看到这里的属性多了几个一脸懵逼,后来看了swagger请求的api-docs的内容才反应过来这个问题,swagger使用了ApiModel的值作为数据的key

将其中一个的ApiModel的值改掉就正常了

  1. @Data

  2. @ApiModel("Two")

  3. public class TwoDTO {

  4. private String mobile;

  5. private String email;

  6. }

GITHUB源码参考 https://github.com/yingziisme/spring-boot-swagger-upload-demo


文章转载自生活不止眼前的代码,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论