原文链接:https://blog.csdn.net/weixin_43724369/article/details/89341949

SpringBoot整合Swagger2案例

先说SpringBoot如何整合Swagger2,然后再说报错问题。

用IDEA新建SpringBoot项目,只需勾选Web即可。

在项目的pom文件中添加Swagger2相关依赖

 <!--引入两个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>

待依赖导入完成后,在项目启动类中添加启动Swagger2的注解

添加自定义的Swagger2的配置类Swagger2Config

 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());
}
}

下图是项目启动后,对应上面的配置信息。不过现在项目还没配置完,先往下面看。

接下来添加对应的实体类对象,和控制层方法,模拟增删改查

①User对象

 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://locahost:8080/swagger-ui.html#/ 即可

上面的三行注解:

@ApiModelProperty("用户的id")
@ApiModelProperty("用户名")
@ApiModelProperty("用户的地址")

对应接口文档

②UserController,采用Restful风格,模拟对User信息的增删改查操作。

 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,里面只有一个简单的返回字符串的方法

 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:/localhost:8080/swagger-ui.html#/ 后

你会发现控制台报错:

看意思是数值类型转换异常,原因是输入了一个空字符串 ,而且是把String转换成Long类型数值的过程中发生异常。

随便一分析,就知道我们刚刚定义的User类中,有一个Long类型的属性id

而在UserController中,我们给每个方法的参数id,都设置了默认值,即defaultValue。

却唯独没有给最后一个方法的参数id,设置默认值。罪魁祸首见下图:

而根据报错信息来看,系统会自动把我们输入的String类型的id,转换成Long类型的id,再保存成JSON数据。

这个转换过程调用的就是Long.parseLong(),注意要求的是非空字符串!

由于我们没有给这个addUser()这个方法设置默认值,所以系统已启动,就自动尝试把空字符串转换成Long类型数值,所以就报错了。

所以,解决办法就很简单——给参数id设置任意一个默认值。如下:

 @PostMapping("/user")
@ApiImplicitParams({@ApiImplicitParam(name = "id",value = "用户id",defaultValue = "00"),
@ApiImplicitParam(name = "username",value = "用户名",defaultValue = "请输入用户名")})
@ApiOperation("添加用户")
public User addUser(User user){
return user;
}

设置完,再启动项目就不会报错了。

SpringBoot整合Swagger2案例,以及报错:java.lang.NumberFormatException: For input string: ""原因和解决办法的更多相关文章

  1. hadoop ha环境下的datanode启动报错java.lang.NumberFormatException: For input string: "10m"

    hadoop ha环境启动start-dfs.sh的时候datanode启动不了,并且报错. [hadoop@datanode2 ~]$ cat /home/hadoop/hadoop-2.7.3/l ...

  2. Window启动Zookeeper报错java.lang.NumberFormatException: For input string:

    用zkServer start命令报如题的错误,改为直接用zkServer启动则ok 还有在window下,myid文件不能是myid.txt,不能带文件格式 dataDir=D:/zookeeper ...

  3. java.lang.NumberFormatException: For input string: "F"

    在通过myBatis执行sql时,报错: java.lang.NumberFormatException: For input string: "F" xml中sql内容为: &l ...

  4. 执行Hive时出现org.apache.hadoop.util.RunJar.main(RunJar.java:136) Caused by: java.lang.NumberFormatException: For input string: "1s"错误的解决办法(图文详解)

    不多说,直接上干货 问题详情 [kfk@bigdata-pro01 apache-hive--bin]$ bin/hive Logging initialized -bin/conf/hive-log ...

  5. mybatis 报错:Caused by: java.lang.NumberFormatException: For input string

    mybatis的if标签之前总是使用是否为空,今天要用到字符串比较的时候遇到了困难,倒腾半天,才在一个论坛上找到解决方法.笔记一下,如下: 转自:https://code.google.com/p/m ...

  6. MyBatis报错:Caused by: java.lang.NumberFormatException: For input string: "XX"

    <select id="sltTreatment" resultType="com.vitaminmd.sunny.core.bo.Treatment"& ...

  7. maven项目中使用redis集群报错: java.lang.NumberFormatException: For input string: "7006@17006"

    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [redis.client ...

  8. Swagger2异常 java.lang.NumberFormatException: For input string: ""

    问题在访问swagger首页时报错: java.lang.NumberFormatException: For input string: "" at java.lang.Numb ...

  9. java.lang.NumberFormatException: For input string:"filesId"

    做项目时候,页面获取出现了这个问题.找了好久一直以为是我字段或者是数据库字段问题导致引起的. 最后才发现是 struts2中jsp我写错了一个参数,一直导致报错.后来改了就好了. 当大家遇到这个问题的 ...

随机推荐

  1. $.proxy和$.extend

    $.proxy用法详解 参考:https://www.cnblogs.com/alice626/p/6004864.html jQuery中的$.proxy官方描述为: 描述:接受一个函数,然后返回一 ...

  2. 统计一个字符串中"java"出现的次数

    public class CountJava{ public static void main(String[] args){ String str = "dnajjavaNISLjavaE ...

  3. S5P4418开发板android源码下uboot和内核缺省文件的配置

    uboot 需要配置缺省文件,进入解压的源码目录 android,然后进入 u-boot 目录,如下图所示.如上图所示,如果是 1G 核心板,则使用“cp nsih-1G16b-4418.txt ns ...

  4. spark-shell使用指南. - 韩禹的博客

    在2.0版本之前,Spark的主要编程接口是RDD(弹性分布式数据集),在2.0之后,则主推Dataset,他与RDD一样是强类型,但更加优化.RDD接口仍然支持,但为了更优性能考虑还是用Datase ...

  5. day38-进程-事件

    #1.事件Event:以交通灯为例.可以控制所有进程等待或者运行. from multiprocessing import Event e = Event() #实例化一个事件,创建一个交通灯,默认是 ...

  6. 扩增|feather evolution

    Wool vs feather 扩增方法:1.Gene Duplication2.Genome Duplication3.Cluster 哺乳动物毛发和鸟类的羽毛,都来自于角蛋白. 羽毛进化图 DNA ...

  7. getopt|sys|open|print文件|main()|if __name__ == "__main__"|getline()

    #!/usr/bin/python import sys import getopt import re def compare(f1,f2,o1,o2,si_line): lines_count=0 ...

  8. [LC] 167. Two Sum II - Input array is sorted

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  9. 第十六届“二十一世纪的计算”学术研讨会 牛津大学肿瘤成像学教授Michael Brady主题演讲

    Computing and Healthcare 牛津大学肿瘤成像学教授Michael Brady主题演讲" title="第十六届"二十一世纪的计算"学术研讨 ...

  10. apache和tomcat的关系

    apache和tomcat的关系: 举个例子:apache是一辆卡车,上面可以装一些东西如html等.但是不能装水,要装水必须要有容器(桶),tomcat就是一个桶(装像JAVA这样的水),而这个桶也 ...