springboot swagger

 

1.引用swagger

在pom中添加

复制代码
  <!--引入Swagger -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-swagger</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.caspar-chen</groupId>
            <artifactId>swagger-ui-layer</artifactId>
            <version>1.1.3</version>
        </dependency>
复制代码

2.文档中添加注解

复制代码
package com.ckfuture.pro.sys.role.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ckfuture.pro.sys.role.dto.roleParam;
import com.ckfuture.pro.sys.role.pojo.roleEntity;
import com.ckfuture.pro.sys.role.service.roleService;
import com.ckfuture.pro.sys.role.vo.roleVo;
import com.ckfuture.pro.sys.roleMenu.pojo.roleMenuEntity;
import com.ckfuture.pro.sys.roleMenu.service.roleMenuService;
import com.ckfuture.util.ResponseCode;
import com.ckfuture.util.ResponseMsg;
import com.ckfuture.util.Result;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @descrption: 角色信息控制器
 * @author: CKFuture
 * @since: 2021-09-23 0:11
 * @version: v1.0
 * @LastEditTime:
 * @LastEditors:
 * @copyright: hrbckfuture.com
 */
@Api(tags={"角色信息接口"})
@Controller
@RequestMapping("/sys/role")
public class roleController {
    private roleService service;
    private roleEntity entity;
    private roleVo vo;
    private List<roleVo> list = null;
    private PageInfo<roleVo> pageInfo = null;
    private roleParam queryParam = null;

    private roleMenuService rolemenuService;
    private roleMenuEntity rolemenuEntity;

    @Autowired
    private roleController(roleService iservice,roleMenuService irolemenuService){
        this.service = iservice;
        this.rolemenuService = irolemenuService;
    }

    @ApiOperation(value = "获取角色信息列表",httpMethod = "GET", notes = "获取角色信息列表")
    @ResponseBody
    @RequestMapping(value = {"/list"}, method = RequestMethod.GET)
    public Result getList(
                @ApiParam(value = "角色名称", required = true) String roleName,
                @ApiParam(value = "分页起始", required = true) Integer pageIndex,
                @ApiParam(value = "单页数量", required = true) Integer pageSize) {
        try {
            PageHelper.startPage(pageIndex, pageSize);
            //查询参数
            queryParam = new roleParam();
            queryParam.setRoleName(roleName);

            list = service.getList(queryParam);
            pageInfo = new PageInfo<roleVo>(list);
            //分页列表,总数
            return Result.successPage(pageInfo.getList(), (int) pageInfo.getTotal());
        } catch (Exception ex) {
            return Result.failure(ResponseCode.SUCCESS, ResponseMsg.QUERY_ERROR);
        }
    }

    @ApiOperation(value = "获取单个角色信息",httpMethod = "POST", notes = "获取当个角色信息")
    @ResponseBody
    @RequestMapping(value = {"/one/{name}/{remark}"}, method = RequestMethod.GET)
    public Result getOne(
                @ApiParam(value = "角色名称", required = true) @PathVariable(value = "roleName", required = false) String roleName,
                @ApiParam(value = "角色备注", required = true) @PathVariable(value = "remark", required = false) String remark) {
        try {
            vo = service.getOne(roleName, remark);
            return Result.success(vo);
        } catch (Exception e) {
            return Result.failure(ResponseCode.ERROR_999, ResponseMsg.QUERY_ERROR);
        }
    }

    @ApiOperation(value = "添加角色信息",httpMethod = "POST", notes = "添加角色信息")
    @ResponseBody
    @RequestMapping(value = {"/add"}, method = RequestMethod.POST)
    public Result add(@ApiParam(value = "角色实体", required = true) @RequestBody JSONObject jsb) {
        try {
            //1.添加角色表
            entity = JSON.toJavaObject(jsb, roleEntity.class);
            service.add(entity);
            //2.获取添加后的角色编号
            vo = service.getOne(entity.getRoleName(), entity.getRemark());
            //3.添加角色和菜单信息关系表
            JSONArray checkedKeys = jsb.getJSONArray("CheckedKeys");
            for (int i = 0; i < checkedKeys.size(); i++) {
                rolemenuEntity = new roleMenuEntity();
                rolemenuEntity.setRid(vo.getId());//角色编号
                rolemenuEntity.setMid(Integer.parseInt(checkedKeys.get(i).toString()));//菜单编号
                rolemenuService.add(rolemenuEntity);
            }
            return Result.success(ResponseMsg.INSERT_UPDATE_SUCCESS);
        } catch (Exception ex) {
            ex.printStackTrace();
            return Result.failure(ResponseCode.ERROR_999, ResponseMsg.INSERT_UPDATE_ERROR);
        }
    }

    @ApiOperation(value = "修改角色信息",httpMethod = "PUT", notes = "修改角色信息")
    @ResponseBody
    @RequestMapping(value = {"/update"}, method = RequestMethod.PUT)
    public Result update(@ApiParam(value = "角色实体", required = true) @RequestBody JSONObject jsb) {
        try {
            //1.修改角色表
            entity = JSON.toJavaObject(jsb, roleEntity.class);
            service.update(entity);
            //2.删除角色关联的菜单
            rolemenuService.delete(entity.getId());
            //3.重新添加角色和菜单信息关系表
            JSONArray checkedKeys = jsb.getJSONArray("CheckedKeys");
            for (int i = 0; i < checkedKeys.size(); i++) {
                rolemenuEntity = new roleMenuEntity();
                rolemenuEntity.setRid(entity.getId());//角色编号
                rolemenuEntity.setMid(Integer.parseInt(checkedKeys.get(i).toString()));//菜单编号
                rolemenuService.add(rolemenuEntity);
            }
            return Result.success(ResponseMsg.INSERT_UPDATE_SUCCESS);
        } catch (Exception ex) {
            return Result.failure(ResponseCode.ERROR_999, ResponseMsg.INSERT_UPDATE_ERROR);
        }
    }

    @ApiOperation(value = "删除角色信息",httpMethod = "DELETE", notes = "删除角色信息")
    @ResponseBody
    @RequestMapping(value = {"/delete/{id}"}, method = RequestMethod.DELETE)
    public Result delete(@ApiParam(value = "角色编号", required = true) @PathVariable(value = "id", required = false) Integer id) {
        try {
            service.delete(id);
            //删除关联 角色与菜单关系表
            rolemenuService.delete(id);
            return Result.success(ResponseMsg.DELETE_SUCCESS);
        } catch (Exception ex) {
            return Result.failure(ResponseCode.ERROR_999, ResponseMsg.INSERT_UPDATE_ERROR);
        }
    }

    @ApiOperation(value = "改变角色信息状态",httpMethod = "PUT", notes = "改变角色信息状态")
    @ResponseBody
    @RequestMapping(value = {"/changeStatus"}, method = RequestMethod.PUT)
    public Result changeStatus(@ApiParam(value = "id:'数据编号',deleted:'0/1'", required = true) @RequestBody JSONObject jsb) {
        Integer id;//数据编号
        Integer deleted;//状态
        id = jsb.getInteger("id");
        deleted = jsb.getInteger("deleted");
        service.changeStatus(id, deleted);
        return Result.success(ResponseMsg.DELETE_SUCCESS);
    }
}
复制代码

3.添加配置

复制代码
package com.ckfuture.pro.config;

import com.google.common.base.Predicates;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@SpringBootConfiguration
@EnableSwagger2  //是否加载swagger 开关
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {

        com.google.common.base.Predicate<RequestHandler> selector1 = RequestHandlerSelectors.basePackage("com.ckfuture.pro.feishu");
        com.google.common.base.Predicate<RequestHandler> selector2 = RequestHandlerSelectors.basePackage("com.ckfuture.pro.sys");

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(Predicates.or(selector1,selector2))
                .paths(PathSelectors.any())
                .build();
        // .globalOperationParameters(setHeaderToken());//token验证
    }
    private ApiInfo apiInfo() {

        return new ApiInfoBuilder()
                .title("系统服务API")
                .description("创客未来@API")
                .termsOfServiceUrl("http://www.hrbckfuture.com")
                .license("© 2021-创客未来. All rights reserved.")
                .version("1.1.0")
                .build();
    }
    private List<Parameter> setHeaderToken() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        tokenPar.name("X-Auth-Token").description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        pars.add(tokenPar.build());
        return pars;
    }


}
复制代码

4.访问接口

方式1:原始ui: http://${host}:${port}/swagger-ui.html

 

 

方式2:基于layui:    http://${host}:${port}/docs.html

 

posted @   创客未来  阅读(104)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示