SpringBoot(十四)-- 整合Swagger2

1.pom依赖

        <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>

2.Swagger配置类

增加@EnableSwagger2和@Configuration注解

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;

    /**  
     * ClassName:SwaggerConfig 
     * Date:     2017年12月5日 上午11:54:54
     * @author   xbq  
     * @version    
     * @since    JDK 1.8
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.rxwx.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }

        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("springboot利用swagger构建api文档")
                    .description("简单优雅的restfun风格,http://www.cnblogs.com/xbq8080")
                    .termsOfServiceUrl("http://www.cnblogs.com/xbq8080")
                    .contact("小葱拌豆腐~")
                    .version("1.0")
                    .build();
        }
    }

  通过@Configuration注解,让Spring来加载该类配置,@EnableSwagger2注解来启用Swagger2。

  再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore注解的API)。

3.启动类加上注解

  @EnableSwagger2

  

4.在控制层 增加 注解

例如:

    /**
     * 用户控制器
     */
    @RestController
    @RequestMapping(value = "/user")
    @Api("用户信息相关api")
    public class UserController {

        @Autowired
        UserService userService;
        
        /**
         * register:(注册).  
         * @param nickName
         * @param password
         * @param phone
         * @return
         */
        @ApiOperation(value="用户注册", notes="用户注册")
        @ApiImplicitParams({
            @ApiImplicitParam(paramType="query", name="nickName", dataType="String", required=true, value="用户的姓名"),
            @ApiImplicitParam(paramType="query", name="password", dataType="String", required=true, value="用户的密码"),
            @ApiImplicitParam(paramType="query", name="phone", dataType="String", required=true, value="用户的电话")
        })
        @RequestMapping(value = "/register", method = RequestMethod.GET)
        public Object register( String nickName, String password, String phone) {
            if(StringUtils.isEmpty(nickName)){
                return Result.error("-100","nickName为空");
            }
            if(StringUtils.isEmpty(password)){
                return Result.error("-100","password为空");
            }
            if(StringUtils.isEmpty(nickName)){
                return Result.error("-100","phone为空");
            }
            User user = new User();
            user.setNickName(nickName);
            user.setPassword(MD5Util.generateMD5(password));
            user.setPhone(phone);
            try {
                userService.insert(user);
            } catch (Exception e) {
                logger.error(e.getMessage(),e);
                return Result.error("-100","注册错误");
            }
            
            return Result.success("success");
        }
        
        /**
         * login:(登录).  
         * @author xbq
         * Date:2017年11月23日下午6:00:09
         *
         * @param nickName
         * @param password
         * @return
         */
        @ApiOperation(value="用户登录", notes="用户登录")
        @ApiImplicitParams({
            @ApiImplicitParam(paramType="query", name="nickName", dataType="String", required=true, value="用户的姓名"),
            @ApiImplicitParam(paramType="query", name="password", dataType="String", required=true, value="用户的密码")
        })
        @RequestMapping(value = "/login", method = RequestMethod.GET)
        public Object login(String nickName , String password) {
            if(StringUtils.isEmpty(nickName)){
                return Result.error("-100","nickName为空");
            }
            if(StringUtils.isEmpty(password)){
                return Result.error("-100","password为空");
            }
            // 根据用户名查询密码
            User userResult = null;
            try {
                userResult = userService.findUserByIdOrName(null, nickName);
            } catch (Exception e1) {
                logger.error(e1.getMessage(),e1);
                return Result.error("-100","根据用户名查询用户密码错误");
            }
            if(userResult == null) {
                return Result.error("-100","不存在该用户名");
            }
            // 将数据库中的密码 和 界面传来的密码进行验证
            boolean flag = MD5Util.verify(password, userResult.getPassword());
            if(!flag) {
                return Result.error("-100","密码错误");
            }
            User user = null;
            try {
                User userParam = new User();
                userParam.setNickName(nickName);
                user = userService.findUser(userParam);
            } catch (Exception e) {
                logger.error(e.getMessage(),e);
                return Result.error("-100","根据用户名查询用户错误");
            }
            if(user == null) {
                return Result.error("-100","用户名或密码错误");
            }
            // 生成token
            String token = System.currentTimeMillis() + "";
            user.setToken(token);
            return Result.success(user);
        }
        
        /**
         * account:(查询账户信息).  
         * @author xbq
         * Date:2017年11月23日下午6:00:18
         *
         * @param id
         * @return
         */
        @ApiOperation(value="获取指定id用户的详细信息", notes="根据user的id来获取用户详细信息")
        @ApiImplicitParam(paramType="query", name="id", dataType="Integer", required=true, value="用户id")
        @RequestMapping(value = "/account", method = RequestMethod.GET)
        public Object account(Integer id){
            User user = null;
            try {
                user = userService.findUserByIdOrName(id ,null);
            } catch (Exception e) {
                e.printStackTrace();  
            }
            UserDetail target = new UserDetail();
            org.springframework.beans.BeanUtils.copyProperties(user, target);
            
            return Result.success(target);
        }
    }

 完成上述代码后,打包Spring Boot程序并启动,打开浏览器访问:http://localhost:8080/swagger-ui.html,就能看到前文所展示的RESTful API的页面。 

 

posted @ 2018-03-26 22:31  小葱拌豆腐~  阅读(348)  评论(0编辑  收藏  举报