news 2026/4/13 2:06:04

Swagger

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Swagger

介绍

使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。官网: API Documentation & Design Tools for Teams | Swagger

Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,对Swagger进行了封装,简化了相应的操作

使用方式

导入Knife4j的maven坐标

<dependency> <groupld>com.github.xiaoymin</groupld> <artifactld>knife4j-spring-boot-starter</artifactld> <version>3.0.2</version> </dependency>

在配置类中加入knife4j相关配置

/** * 通过knife4j生成接口文档 * @return */ @Bean public Docket docket1() { ApiInfo apiInfo = new ApiInfoBuilder() .title("苍穹外卖项目接口文档") .version("2.0") .description("苍穹外卖项目接口文档") .build(); Docket docket = new Docket(DocumentationType.SWAGGER_2) .groupName("管理端接口") .apiInfo(apiInfo) .select() // 指定生成接口需要扫描的包 .apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin")) .paths(PathSelectors.any()) .build(); return docket; } @Bean public Docket docket2() { ApiInfo apiInfo = new ApiInfoBuilder() .title("苍穹外卖项目接口文档") .version("2.0") .description("苍穹外卖项目接口文档") .build(); Docket docket = new Docket(DocumentationType.SWAGGER_2) .groupName("用户端接口") .apiInfo(apiInfo) .select() .apis(RequestHandlerSelectors.basePackage("com.sky.controller.user")) .paths(PathSelectors.any()) .build(); return docket; }

设置静态资源映射,否则接口文档页面无法访问

/** * 设置静态资源映射 * @param registry */ protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }

这个是重写的 WebMvcConfigurationSupport 父类的方法

使用

启动项目后,在浏览器中输入 localhost:8080/doc.html 就能进入查看接口页面

之后就能在这里进行调试了

常见注解

@Api

用在类上,例如Controller,表示对类的说明

@ApiModel

用在类上,例如entity、DTO、VO

@ApiModelProperty

用在属性上,描述属性信息

@ApiOperation

用在方法上,例如Controller的方法,说明方法的用途、作用

例:

/** * 员工管理 */ @RestController @RequestMapping("/admin/employee") @Slf4j @Api(tags = "员工相关接口") public class EmployeeController { @Autowired private EmployeeService employeeService; @Autowired private JwtProperties jwtProperties; /** * 登录 * * @param employeeLoginDTO * @return */ @PostMapping("/login") @ApiOperation("员工登录") public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) { log.info("员工登录:{}", employeeLoginDTO); Employee employee = employeeService.login(employeeLoginDTO); //登录成功后,生成jwt令牌 Map<String, Object> claims = new HashMap<>(); claims.put(JwtClaimsConstant.EMP_ID, employee.getId()); String token = JwtUtil.createJWT( jwtProperties.getAdminSecretKey(), jwtProperties.getAdminTtl(), claims); EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder() .id(employee.getId()) .userName(employee.getUsername()) .name(employee.getName()) .token(token) .build(); return Result.success(employeeLoginVO); } /** * 退出 * * @return */ @PostMapping("/logout") @ApiOperation("员工退出") public Result<String> logout() { return Result.success(); } /** * 新增员工 * @param employeeDTO * @return */ @PostMapping @ApiOperation("新增员工") public Result save(@RequestBody EmployeeDTO employeeDTO){ log.info("新增员工,员工数据:{}",employeeDTO); employeeService.save(employeeDTO); return Result.success(); } /** * 员工分页查询 * @param employeePageQueryDTO * @return */ @GetMapping("/page") @ApiOperation("员工分页查询") public Result page(EmployeePageQueryDTO employeePageQueryDTO){ log.info("员工分页查询:{}",employeePageQueryDTO); PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO); return Result.success(pageResult); } /** * 启用禁用员工账号 * @param status * @param id * @return */ @PostMapping("/status/{status}") @ApiOperation("启用禁用员工账号") public Result startOrStop(@PathVariable Integer status, Long id){ log.info("员工状态:{},员工id:{}",status,id); employeeService.startOrStop(status,id); return Result.success(); } /** * 根据id查询员工信息 * @param id * @return */ @GetMapping("/{id}") @ApiOperation("根据id查询员工信息") public Result<Employee> getById(@PathVariable Long id){ log.info("根据id查询员工信息:{}",id); Employee employee = employeeService.getById(id); return Result.success(employee); } /** * 编辑员工信息 * @param employeeDTO * @return */ @PutMapping @ApiOperation("编辑员工信息") public Result update(@RequestBody EmployeeDTO employeeDTO){ log.info("编辑员工信息:{}",employeeDTO); employeeService.update(employeeDTO); return Result.success(); } }
@Data @ApiModel(description = "员工登录时传递的数据模型") public class EmployeeLoginDTO implements Serializable { @ApiModelProperty("用户名") private String username; @ApiModelProperty("密码") private String password; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 15:45:07

YOLOFuse云服务器部署教程:在阿里云/腾讯云上运行实例

YOLOFuse云服务器部署教程&#xff1a;在阿里云/腾讯云上运行实例智能感知的边界正在被打破 想象这样一个场景&#xff1a;深夜的高速公路上&#xff0c;浓雾弥漫&#xff0c;普通摄像头几乎无法分辨前方是否有行人或障碍物。而一辆自动驾驶测试车却稳稳减速——它的“眼睛”不…

作者头像 李华
网站建设 2026/4/5 22:20:43

YOLOFuse工业质检应用:高温部件缺陷识别新思路

YOLOFuse工业质检应用&#xff1a;高温部件缺陷识别新思路 在钢铁厂的高炉旁&#xff0c;热浪翻滚、烟雾弥漫&#xff0c;可见光摄像头拍出的画面模糊不清&#xff0c;传统视觉检测系统频频“失明”。而在不远处的电力变电站&#xff0c;夜间巡检时设备表面反光严重&#xff0c…

作者头像 李华
网站建设 2026/4/12 23:09:21

YOLOFuse CVE 编号申请准备:严重漏洞披露流程

YOLOFuse CVE 编号申请准备&#xff1a;严重漏洞披露流程 在智能安防与边缘计算快速演进的今天&#xff0c;多模态目标检测正成为突破环境感知瓶颈的关键技术。尤其在夜间监控、火灾搜救等低光照或复杂遮挡场景中&#xff0c;传统基于可见光的目标检测系统频频失效——而融合红…

作者头像 李华
网站建设 2026/4/5 20:12:56

YOLOFuse项目获得社区广泛认可:开发者纷纷点赞收藏

YOLOFuse&#xff1a;多模态目标检测的轻量级破局者 在智能安防、自动驾驶和全天候监控系统日益普及的今天&#xff0c;一个现实问题始终困扰着开发者&#xff1a;当夜幕降临、浓雾弥漫或环境被遮挡时&#xff0c;传统的基于可见光图像的目标检测模型往往“失明”。尽管YOLO系…

作者头像 李华
网站建设 2026/4/10 12:09:15

L298N电机驱动原理图滤波电路设计要点

L298N电机驱动中的滤波设计&#xff1a;不只是加几个电容那么简单你有没有遇到过这种情况&#xff1f;一个基于L298N的智能小车&#xff0c;代码写得没问题&#xff0c;逻辑也清晰&#xff0c;可一上电&#xff0c;电机还没转&#xff0c;单片机就频繁复位&#xff1b;或者PWM调…

作者头像 李华
网站建设 2026/4/10 3:43:19

YOLOFuse Substack 邮件订阅开通:定期推送更新动态

YOLOFuse&#xff1a;让多模态目标检测真正走进工程实践 在城市夜幕下的监控摄像头前&#xff0c;一个模糊的人影悄然出现。可见光画面几乎无法辨识轮廓&#xff0c;但红外图像却清晰捕捉到了热源信号——如果系统只能依赖单一模态&#xff0c;这个关键目标可能就此漏检。这正是…

作者头像 李华