SpringBoot 基于swagger实现RESTfulApi风格

来源:互联网 发布:安卓网络聊天室破解版 编辑:程序博客网 时间:2024/05/16 05:27

SpringBoot 基于swagger实现RESTfulApi风格

1、swagger概述

  Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
  Swagger能够实现接口API和文档保持一致性。

2、添加maven依赖

<properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>    <java.version>1.8</java.version>    <swagger.version>2.2.2</swagger.version></properties><dependencies>    <dependency>        <groupId>io.springfox</groupId>        <artifactId>springfox-swagger2</artifactId>        <version>${swagger.version}</version>    </dependency>    <dependency>        <groupId>io.springfox</groupId>        <artifactId>springfox-swagger-ui</artifactId>        <version>${swagger.version}</version>    </dependency></dependencies>

3、Swagger配置

/** * Swagger配置 * @author 陈梓平 * @date 2017/10/24. */@Configuration@EnableSwagger2public class SwaggerConfig {    @Bean    public Docket demoApi(){        return new Docket(DocumentationType.SWAGGER_2)                .groupName("demo")//组名                .genericModelSubstitutes(DeferredResult.class)//通用的模板替代                .useDefaultResponseMessages(false)//是否使用默认响应信息                .forCodeGeneration(true)//通用编码                .pathMapping("/")// base,最终调用接口后会和paths拼接在一起                .select()                .paths(or(regex("/api/.*")))//过滤的接口                .build()                .apiInfo(apiInfo());    }    @Bean    public Docket createRestApi() {        Predicate<RequestHandler> predicate = new Predicate<RequestHandler>() {            @Override            public boolean apply(RequestHandler requestHandler) {                Class<?> declaringClass  = requestHandler.getClass();                if (declaringClass == BasicErrorController.class)// 排除                    return false;                if(declaringClass.isAnnotationPresent(RestController.class)) // 被注解的类                    return true;                if(declaringClass.isAssignableFrom(ResponseBody.class)) // 被注解的方法                    return true;                return false;            }        };        return new Docket(DocumentationType.SWAGGER_2)                .apiInfo(apiInfo())                .useDefaultResponseMessages(false)                .select()                .apis(predicate)                .build();    }    private ApiInfo apiInfo() {        Contact contact = new  Contact();        contact.setName("陈梓平");        contact.setUrl("http://blog.csdn.net/dushiwodecuo");        contact.setEmail("catalpaflat@outlook.com");        return new ApiInfoBuilder()                .title("Electronic Health Record(EHR) Platform API")//大标题                .description("EHR Platform's REST API, all the applications could access the Object model data via JSON.")//详细描述                .version("1.0")//版本                .termsOfServiceUrl("NO terms of service")                .contact("陈梓平")//作者                .license("The Apache License, Version 2.0")                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")                .build();    }}

4、测试

4.1.配置Controller

/** * Controller * @author 陈梓平 * @date 2017/10/24. */@Controller@RequestMapping(value = "/api")public class DemoController {    private Logger logger = LoggerFactory.getLogger(DemoController.class);    /**     * 可以直接使用@ResponseBody响应JSON     * @return     */    @RequestMapping(value = "/getcount", method = RequestMethod.POST)    @ApiOperation(value="测试-getCount", notes="getCount更多说明")    @ResponseBody    public ModelMap getCount() {        logger.info(">>>>>>>> begin getCount >>>>>>>>");        ModelMap map = new ModelMap();        map.addAttribute("count", 158);        // 后台获取的国际化信息        map.addAttribute("xstest", "测试");        return map;    }}

4.2 测试

浏览器访问:http://localhost:8080/swagger-ui.html