微信公众号幸运28源码下载

微信公众号幸运28源码下载

QQ1784662395

一直以来做对外的接口文档都比较原始,基本上都是手写的文档传来传去,最近发现了一个新玩具,可以在接口上省去不少麻烦。

swagger是一款方便展示的API文档框架。它可以将接口的类型最全面的展示给对方开发人员,避免了手写文档的片面和误差行为。

swagger目前有两种swagger和swagger2两种,1比较麻烦,所以不考虑使用。本文主要记录我用swagger2做对外接口的两种方式,方面后面查阅。

一、使用传统的springmvc整合swagger2

1、maven依赖

复制代码
<!--springfox依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.6.3</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>
复制代码

2、spring-mvc.xml 中添加映射静态的配置(其实我项目中把这个去掉也可以,不知道什么情况):

<!--  swagger静态文件路径 -->
    <mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>  
    <mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>

注意:基本的springmvc配置我就不贴了,需要注意的是,如果你看到swagger-ui.html 界面出来,但却一片空白,请检查下你web.xml中拦截器的配置。

3、然后是swagger2的配置类:

复制代码
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("net.laoyeyey.yyblog"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("yyblog项目 RESTful APIs")
                .description("yyblog项目api接口文档")
                .version("1.0")
                .build();
    }
}
复制代码

注意:paths如果在生产情况下可以调整为PathSelectors.none(),即不显示所有接口信息;

4、接口信息配置

即在SpringMvc的Controller中配置相关的接口信息

复制代码
@Controller
@RequestMapping(value = "aitou")
@Api(description = "测试服务-账户信息查询")
public class DailyOperationDataController {
    Logger           logger    = Logger.getLogger(DailyOperationDataController.class);
    @Autowired
    private DailyOperationDataService DailyOperationDataService;
     
    @ApiOperation(value = "账户信息查询接口")
    @RequestMapping(method ={RequestMethod.POST,RequestMethod.GET}, value="/query/dailydata/{dataDate}")
    @ResponseBody
    public DailyOperationDataDto getDailyReportByDataDate(@PathVariable("dataDate") String dataDate) {
        try {
            return DailyOperationDataService.getDailyReportByDataDate(dataDate);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        return null;
    }

}
复制代码

注:通常情况下swagger2会将扫描包下所有的接口展示出来,这里我是对外的接口是单独一个包,避免展示过多的接口,当然接口方法也可以让它不展示。可以在下面看到相关的注解中有写。

常用的一些注解

@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiIgnore:使用该注解忽略这个API

基本上就是上面这些了,是不是很easy,下面看下效果图

 

二、使用springboot整合swagger2

上面说了使用传统的springmvc整合swagger2,在说说最近比较流行的springboot的方式,其实原理都是一样的。

1、maven依赖

复制代码
<!--springfox依赖 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
复制代码

这个是我最近用springboot写的个人项目中的内用,版本用的2.7.0

2、添加静态资源配置

复制代码
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {/**
     * 配置静态资源路径以及上传文件的路径
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/upload/**").addResourceLocations(environment.getProperty("spring.resources.static-locations"));
        /*swagger-ui*/
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}
复制代码

其实就是最后两句,如果你不配置这个的话,访问swagger-ui.html会出现500,还是404的错误来着,记不清了,应该是404.

3、swagger2的配置类

和上面一样,基本上没区别

复制代码
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("net.laoyeye.yyblog.web.frontend"))
                .paths(PathSelectors.none())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("yyblog项目 RESTful APIs")
                .description("yyblog项目api接口文档")
                .version("1.0")
                .build();
    }


}
复制代码

注意,我上面有说path的问题哦,直接拷贝不显示api的,(#^.^#)

4、接口的配置

复制代码
/**
 * 前台文章Controller
 * @author 小卖铺的老爷爷
 * @date 2018年5月5日
 * @website www.laoyeye.net
 */
@Api(description="文章查询")
@Controller
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    private ArticleService articleService;
    @Autowired
    private SettingService settingService;
    @Autowired
    private CateService cateService;
    @Autowired
    private TagReferService tagReferService;
    @Autowired
    private UserService userService;
    @Autowired
    private ArticleMapper articleMapper;
    @Autowired
    private CommentService commentService;
    
    @ApiOperation(value="文章查询接口")
    @ApiImplicitParam(name = "id", value = "文章ID", required = true, dataType = "Long")
    @GetMapping("/{id}")
    public String index(Model model, @PathVariable("id") Long id) {
        try {
            articleService.updateViewsById(id);
        } catch (Exception ignore) {
        }
        List<Setting> settings = settingService.listAll();
        Map<String,Object> map = new HashMap<String,Object>();
        for (Setting setting : settings) {
            map.put(setting.getCode(), setting.getValue());
        }
        Article article = articleService.getArticleById(id);
        model.addAttribute("settings", map);
        model.addAttribute("cateList", cateService.listAllCate());
        model.addAttribute("article", article);
        model.addAttribute("tags", tagReferService.listNameByArticleId(article.getId()));
        model.addAttribute("author", userService.getNicknameById(article.getAuthorId()));
        //回头改
        model.addAttribute("articles",  articleMapper.listArticleByTitle(null));
        model.addAttribute("similars", articleMapper.listArticleByTitle(null));
        CommentQuery query = new CommentQuery();
        query.setLimit(10);
        query.setPage(1);
        query.setArticleId(id);
        model.addAttribute("comments", commentService.listCommentByArticleId(query));
        return "frontend/article";
    }
    
    @ApiOperation(value="文章评论查询接口")
    @PostMapping("/comments")
    @ResponseBody
    public DataGridResult comments(CommentQuery query) {
        //设置默认10
        query.setLimit(10);
        return commentService.listCommentByArticleId(query);
    }
    
    @ApiOperation(value="文章点赞接口")
    @ApiImplicitParam(name = "articleId", value = "文章ID", required = true, dataType = "Long")
    @PostMapping("/approve")
    @ResponseBody
    public YYBlogResult approve(@RequestParam Long articleId) {
        return articleService.updateApproveCntById(articleId);
    }
}
复制代码

最后同样来个效果图,和上面一样。

 PathSelectors.none()的时候

PathSelectors.any()的时候

 看到效果图是不是接口内容一目了然,很简洁明了了。

最后,好像忘记说swagger文档的路径了


阅读更多
想对作者说点什么? 我来说一句

幸运28游戏【源码】【三分之一】

2013年01月04日 16.89MB 下载

2017新版幸运28源码pc蛋蛋

2017年06月11日 10.5MB 下载

PHP完整的微信幸运大转盘代码

2014年06月24日 2.28MB 下载

幸运28网站源码(PC蛋蛋网站源码)

2011年06月02日 4.48MB 下载

没有更多推荐了,返回首页

不良信息举报

微信公众号幸运28源码下载

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭