news 2026/6/4 19:49:27

java.lang.NumberFormatException: For input string: ““

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java.lang.NumberFormatException: For input string: ““

Swagger 问题修复说明

问题描述

访问Swagger文档时出现以下错误:

Illegal DefaultValue null for parameter type integer java.lang.NumberFormatException: For input string: ""

问题原因

Swagger在解析@RequestParam注解时,对于Long类型参数的defaultValue处理有兼容性问题,特别是在以下情况:

  1. Long类型参数使用defaultValue

    @RequestParam(defaultValue = "1") Long current
  2. Swagger版本兼容性

    • SpringFox 3.0.0 对Long类型的默认值解析存在bug
    • 在序列化为JSON时会尝试将空字符串转换为Long类型

解决方案

方案1:修改参数类型(已采用)

将Long类型参数改为Integer类型:

// 修改前 @RequestParam(defaultValue = "1") Long current // 修改后 @RequestParam(defaultValue = "1") Integer current

优点:

  • 简单直接,兼容性好
  • Integer类型足够满足分页参数需求
  • 不需要额外配置

修改内容:

@GetMapping("/page") public R<IPage<ChatRecord>> pageList( @ApiParam(value = "当前页", example = "1") @RequestParam(defaultValue = "1") Integer current, @ApiParam(value = "每页条数", example = "10") @RequestParam(defaultValue = "10") Integer size, // ... 其他参数 ) { // 转换为Long类型传给MyBatis-Plus Page<ChatRecord> page = new Page<>(current.longValue(), size.longValue()); // ... }

方案2:创建Swagger配置类(备用)

创建SwaggerConfig来处理类型替换:

@Configuration public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.hzys.controller")) .paths(PathSelectors.any()) .build() // 解决Long类型参数在Swagger中的显示问题 .directModelSubstitute(Long.class, String.class); } }

方案3:使用@ApiParam的example属性

为参数添加明确的示例值:

@ApiParam(value = "当前页", example = "1") @RequestParam(defaultValue = "1") Integer current

最佳实践

1. 分页参数推荐使用Integer

// ✅ 推荐:使用Integer @RequestParam(defaultValue = "1") Integer current @RequestParam(defaultValue = "10") Integer size // ❌ 不推荐:使用Long(可能有Swagger兼容问题) @RequestParam(defaultValue = "1") Long current @RequestParam(defaultValue = "10") Long size

2. 为所有参数添加示例值

@ApiParam(value = "当前页", example = "1") @RequestParam(defaultValue = "1") Integer current @ApiParam(value = "每页条数", example = "10") @RequestParam(defaultValue = "10") Integer size @ApiParam(value = "用户ID", example = "user001") @RequestParam(required = false) String userId

3. 统一的分页参数处理

创建通用的分页参数对象:

@Data @ApiModel("分页参数") public class PageParam { @ApiModelProperty(value = "当前页", example = "1") private Integer current = 1; @ApiModelProperty(value = "每页条数", example = "10") private Integer size = 10; public Page<T> toPage() { return new Page<>(current.longValue(), size.longValue()); } } // 在Controller中使用 @GetMapping("/page") public R<IPage<ChatRecord>> pageList(PageParam pageParam, @RequestParam(required = false) String userId) { Page<ChatRecord> page = pageParam.toPage(); // ... }

验证修复

1. 重启应用

重启Spring Boot应用。

2. 访问Swagger文档

访问:http://localhost:8091/swagger-ui/index.html

3. 检查分页接口

找到"聊天记录管理"下的"分页查询聊天记录"接口,确认:

  • 参数显示正常
  • 没有错误信息
  • 可以正常测试

4. 测试接口

# 测试分页接口 curl "http://localhost:8091/api/chat/record/page?current=1&size=10"

其他可能的Swagger问题

1. 枚举类型显示问题

如果枚举在Swagger中显示有问题,可以添加:

@ApiModelProperty(value = "消息类型", example = "1", allowableValues = "1,2,3") private Integer msgType;

2. 日期时间格式问题

对于日期时间字段:

@ApiModelProperty(value = "反馈时间", example = "2026-01-16 10:00:00") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private String feedbackTime;

3. 文件上传参数问题

对于文件上传:

@ApiParam(value = "上传文件", required = true) @RequestParam("file") MultipartFile file

相关配置文件

已创建的文件

  1. SwaggerConfig.java- Swagger配置类

    • 位置:src/main/java/com/hzys/base/config/SwaggerConfig.java
    • 作用:统一配置Swagger,处理类型兼容问题
  2. 修改的文件

    • ChatRecordController.java- 修改分页参数类型

Swagger依赖

确认pom.xml中有正确的Swagger依赖:

<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>

总结

修复内容

✅ 将Long类型分页参数改为Integer类型
✅ 添加了@ApiParam的example属性
✅ 创建了SwaggerConfig配置类
✅ 提供了最佳实践建议

预防措施

  1. 避免在@RequestParam中使用Long类型的defaultValue
  2. 为所有API参数添加example示例值
  3. 统一使用Integer类型处理分页参数
  4. 定期测试Swagger文档的可用性

如果问题仍然存在

  1. 检查Swagger版本兼容性
  2. 查看控制台是否有其他错误信息
  3. 尝试降级SpringFox版本到2.x
  4. 考虑使用SpringDoc替代SpringFox

参考资料

  • SpringFox官方文档
  • Swagger注解使用指南
  • SpringBoot集成Swagger最佳实践



版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 20:38:39

导师严选8个AI论文工具,专科生搞定毕业论文+格式规范!

导师严选8个AI论文工具&#xff0c;专科生搞定毕业论文格式规范&#xff01; AI 工具如何成为论文写作的得力助手 在当前学术环境日益严格的背景下&#xff0c;越来越多的继续教育学生开始借助 AI 工具来辅助论文写作。这些工具不仅能够帮助学生高效完成内容创作&#xff0c;还…

作者头像 李华
网站建设 2026/5/29 0:20:07

金融行业网页如何用vue2实现文件夹上传及秒传功能?

大文件上传解决方案 各位同行大佬们好&#xff0c;作为一个在广东摸爬滚打多年的前端"老油条"&#xff0c;最近接了个让我差点秃顶的项目——20G大文件上传系统&#xff0c;还要兼容IE9&#xff01;这感觉就像让我用竹篮子去打水还要不漏一样刺激… 需求分析&#…

作者头像 李华
网站建设 2026/5/28 19:54:08

重磅丨白山云斩获“金算奖 · 2025年度边缘 AI 卓越企业”!

近日&#xff0c;第十二届全球边缘计算大会&#xff08;Global Edge Computing Conference&#xff09;在上海成功举办。作为边缘计算领域的年度顶级盛会&#xff0c;大会正式揭晓了被誉为行业风向标的“金算奖”评选结果。白山云凭借在边缘云领域深厚的技术积淀&#xff0c;以…

作者头像 李华
网站建设 2026/5/30 8:01:28

Python网上服装店铺系统 服装销售商城系统

目录Python网上服装店铺系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;Python网上服装店铺系统摘要 该系统基于Python开发&#xff0c;结合现代化Web技术构建高效、安全的服装销售…

作者头像 李华
网站建设 2026/5/28 13:32:36

基于微信小程序的睡眠失眠助眠音乐系统

目录睡眠障碍与助眠音乐的研究背景系统设计目标与功能架构关键技术实现方案创新性与应用价值社会效益与推广前景开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;睡眠障碍与助眠音乐的研究背景…

作者头像 李华
网站建设 2026/5/28 18:04:26

【小程序毕设全套源码+文档】基于微信小程序的大学生体检预约小程序设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华