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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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框架的用法!