SpringBoot整合Swagger2案例,以及报错:java.lang.NumberFormatException: For input string: ""原因和解决办法
一、SpringBoot整合Swagger2案例
1、先说SpringBoot如何整合Swagger2,然后再说报错问题。
用IDEA新建SpringBoot项目,只需勾选Web即可。
2、 在项目的pom文件中添加Swagger2相关依赖
[code]<!--引入两个Swagger2相关的依赖--> <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>
3、待依赖导入完成后,在项目启动类中添加启动Swagger2的注解
4、添加自定义的Swagger2的配置类Swagger2Config
[code]package com.zzz.swagger2; 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.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class Swagger2Config { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .pathMapping("/") .select() .apis(RequestHandlerSelectors.basePackage("com.zzz.swagger2.controller"))//指定方法接口都来自controller这个包 .paths(PathSelectors.any())//选any表示给这个controller包下所有的接口都生成文档 .build().apiInfo(new ApiInfoBuilder() .title("SpringBoot整合Swagger")//生成的接口文档的标题名称 .description("SpringBoot整合Swagger,详细信息......")//文档摘要 .version("1.0.0")//API版本,可以自定义 //文档制作人、个人主页地址、邮箱 .contact(new Contact("Kyo", "https://blog.csdn.net/weixin_43724369", "aaa@gmail.com")) .description("Kyo的个人博客")//(可以不配置) .license("The Apache License")//授权信息(可以不配置) .licenseUrl("http://www.baidu.com")//授权地址(可以不配置) .build()); } }
下图是项目启动后,对应上面的配置信息。不过现在项目还没配置完,先往下面看。
5、接下来添加对应的实体类对象,和控制层方法,模拟增删改查
①User对象
[code]package com.zzz.swagger2.Bean; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @ApiModel public class User { @ApiModelProperty("用户的id") private Long id; @ApiModelProperty("用户名") private String username; @ApiModelProperty("用户的地址") private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
添加完User类后,可以启动项目了。
在浏览器中打开:http://127.0.0.1:8080/swagger-ui.html#/ 即可
上面的三行注解:
@ApiModelProperty("用户的id")
@ApiModelProperty("用户名")
@ApiModelProperty("用户的地址")
对应接口文档
②UserController,采用Restful风格,模拟对User信息的增删改查操作。
[code]package com.zzz.swagger2.controller; import com.zzz.swagger2.Bean.User; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @RestController @Api(tags = "用户管理接口") public class UserController { @ApiOperation("通过用户id查询一个用户") @ApiImplicitParam(name = "id",value = "用户id",defaultValue = "33") @GetMapping("/user") public User getUserById(Long id){ User user=new User(); user.setId(id); return user; } @DeleteMapping("/user/{id}") @ApiOperation("通过用户id删除一个用户") @ApiImplicitParam(name = "id",value = "用户id",defaultValue = "99") public Long deleteUserById(@PathVariable Long id){ return id; } @PutMapping("/user") @ApiImplicitParams({@ApiImplicitParam(name = "id",value = "用户id",defaultValue = "80"), @ApiImplicitParam(name = "username",value = "用户名",defaultValue = "李四")}) @ApiOperation("通过用户id更新用户名") public Long updateUsernameById(Long id, String username){ return id; } @PostMapping("/user") @ApiOperation("添加用户") public User addUser(User user){ return user; } }
③再来一个HelloController,里面只有一个简单的返回字符串的方法
[code]package com.zzz.swagger2.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "hello swagger!"; } }
6、这时可以启动项目了,顺便说说controller层里的注解是什么意思
二、报错:java.lang.NumberFormatException: For input string: ""原因和解决办法
项目启动之后,打开http://127.0.0.1:8080/swagger-ui.html#/ 后
你会发现控制台报错:
看意思是数值类型转换异常,原因是输入了一个空字符串 ,而且是把String转换成Long类型数值的过程中发生异常。
随便一分析,就知道我们刚刚定义的User类中,有一个Long类型的属性id
而在UserController中,我们给每个方法的参数id,都设置了默认值,即defaultValue。
却唯独没有给最后一个方法的参数id,设置默认值。罪魁祸首见下图:
而根据报错信息来看,系统会自动把我们输入的String类型的id,转换成Long类型的id,再保存成JSON数据。
这个转换过程调用的就是Long.parseLong(),注意要求的是非空字符串! 2679e
由于我们没有给这个addUser()这个方法设置默认值,所以系统已启动,就自动尝试把空字符串转换成Long类型数值,所以就报错了。
所以,解决办法就很简单——给参数id设置任意一个默认值。如下:
[code]@PostMapping("/user") @ApiImplicitParams({@ApiImplicitParam(name = "id",value = "用户id",defaultValue = "00"), @ApiImplicitParam(name = "username",value = "用户名",defaultValue = "请输入用户名")}) @ApiOperation("添加用户") public User addUser(User user){ return user; }
设置完,再启动项目就不会报错了。
- java.lang.NumberFormatException: For input string: "9004@19004" 的解决办法
- hibernate 中createSQLQuery 聚合分组 java.lang.NumberFormatException: For input string:错误的一个解决办法
- 第一次访问本机上的spring-boot报错:java.lang.NumberFormatException: For input string: "index"
- 执行Hive时出现org.apache.hadoop.util.RunJar.main(RunJar.java:136) Caused by: java.lang.NumberFormatException: For input string: "1s"错误的解决办法(图文详解)
- 解决问题:java.lang.NumberFormatException: For input string: "null"
- 解决:java.lang.NumberFormatException: For input string: "id"
- 如何解决异常:java.lang.NumberFormatException: For input string: "null"
- Struts2访问验证码异常解决OgnlValueStack:64 - ..java.lang.NumberFormatException: For input string: "1494056190
- 异常代码,抛出:java.lang.NumberFormatException: For input string 解决。
- 已解决java.lang.NumberFormatException: For input string: "7006@17006"
- 已解决java.lang.NumberFormatException: For input string: "7006@17006"
- Cause: java.lang.NumberFormatException: For input string: "COM201512220000004"
- 报错:java.lang.NumberFormatException: For input string: "a"
- java.lang.NumberFormatException: For input string: ""
- java.lang.NumberFormatException: For input string: "productList"
- java.lang.NumberFormatException: For input string: ""
- Caused by: java.lang.NumberFormatException: For input string: "undefined"
- struts2,hibernate java.lang.NumberFormatException: For input string 错误
- java.lang.NumberFormatException: For input string:
- maven项目中使用redis集群报错: java.lang.NumberFormatException: For input string: "7006@17006"