接博客“ Idea创建spring boot 项目(2)整合Swagger ”
使用工具:
IDE:idea 2017.2.6
Spirng boot:1.5.9
Swagger版本:2.7.0
Lombok版本:1.16.20
Lombok
是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现Lombok,开发人员可以节省构建诸如getter()
和setter()
这样的方法以及以往用来分类各种accessor
和mutator
的大量时间。
Lombok
官网地址:https://projectlombok.org/ 里面还提供了一个简短的学习视频。
val
:用在局部变量前面,相当于将变量声明为final@NonNull
:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)@Cleanup
:自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally
这样的代码来关闭流@Getter/@Setter
:用在属性上,再也不用自己手写setter和getter方法了,还可以指定访问范围@ToString
:用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)
排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)
调用父类的toString
方法,包含所有属性@EqualsAndHashCode
:用在类上,自动生成equals
方法和hashCode
方法@NoArgsConstructor
, @RequiredArgsConstructor
and @AllArgsConstructor
:用在类上,自动生成无参构造和使用所有参数的构造函数以及把所有@NonNull
属性作为参数的构造函数,如果指定staticName = “of”参数,同时还会生成一个返回类对象的静态工厂方法,比使用构造函数方便很多@Data
:注解在类上,相当于同时使用了@ToString
、@EqualsAndHashCode
、@Getter
、@Setter
和@RequiredArgsConstrutor
这些注解,对于POJO类十分有用@Value
:用在类上,是@Data
的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法@Builder
:用在类、构造器、方法上,为你提供复杂的builder APIs,让你可以像如下方式一样调用Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
更多说明参考Builder@SneakyThrows
:自动抛受检异常,而无需显式在方法上使用throws语句@Synchronized
:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock
或$LOCK
,而java中的synchronized
关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误@Getter(lazy=true)
:可以替代经典的Double Check Lock样板代码@Log
:根据不同的注解生成不同类型的log对象,但是实例名称都是log,有六种可选实现类
@CommonsLog
Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);@Log
Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());@Log4j
Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);@Log4j2
Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);@Slf4j
Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);@XSlf4j
Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class) 打开idea工具,点击左上角File--->Settings,弹出Settings窗口后,点击Settings窗口左边的“Plugins”按钮,然后再Settings窗口的右边的搜索框输入“lombok”,如下图:因为我的idea之前是安装过这个插件的,所以搜索后会出现一个“Update”按钮,点击“Update”,会连接网络更新这个插件;更新完后,“Update”按钮会变成“Restart Intellij IDEA“按钮,点击它,即重起idea;
打开项目build.gradle文件,引入如下依赖:
buildscript { ext { springBootVersion = '1.5.9.RELEASE'//spring boot 版本 } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } //添加资源库 repositories { maven { url 'http://maven.aliyun.com/nexus/content/repositories/central' }//添加阿里仓库 mavenCentral()//添加Maven中央资源库 } apply plugin: 'java'// 指定项目为java项目,项目编译(在项目提示符下执行:gradle build)时生成项目的jar包。 apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'application' group = 'com.demo' version = '1.5.9-SNAPSHOT' sourceCompatibility = 1.8 targetCompatibility = 1.8 mainClassName = 'com.tinckay.App'//告诉gradle启动类的路径 dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") compile("org.springframework.boot:spring-boot-starter-tomcat") compile("io.springfox:springfox-swagger2:2.7.0")//swagger2核心依赖 compile("io.springfox:springfox-swagger-ui:2.7.0")//为项目提供api展示及测试的界面 compile("org.projectlombok:lombok:1.16.20")//lombok依赖包 }
安装重启之后,还需要设置Settings > Build > Compiler > Annotation Processors,点击“Apply”按钮确认,要不然会有lombok requires annotation processing提示;
在com.demo包下创建一个domain包,在domain下创建一个ResponseMsg类实现Serializable接口,如下图:
package com.demo.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.NonNull; import lombok.Setter; import lombok.ToString; import java.io.Serializable; /** * @author SAM * @create 2018-03-14 下午3:28 **/ @Getter @Setter @ToString @ApiModel(description= "返回响应数据") public class ResponseMsg implements Serializable { @ApiModelProperty(name = "状态码",value = "code",required = true,dataType = "int") @NonNull private int code; @ApiModelProperty(name = "返回信息",value = "msg",required = true,dataType = "String") @NonNull private String msg; @ApiModelProperty(name = "返回数据",value = "data",hidden = true) private Object data; } /** * Lombok注解: @Getter/@Setter: 用在属性上,再也不用自己手写setter和getter方法了,还可以指定访问范围 @ToString: 用在类上,可以自动覆写toString方法, 当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性, 或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性 @NonNull: 给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验, 如果为空,则抛出NPE(NullPointerException) Swagger注解: @ApiModel: 用于响应类上,表示一个返回响应数据的信息 (这种一般用在post创建的时候,使用@RequestBody这样的场景, 请求参数无法使用@ApiImplicitParam注解进行描述的时候) @ApiModelProperty: 用在属性上,描述响应类的属性 value–字段说明 name–重写属性名字 dataType–重写属性类型 required–是否必填 example–举例说明 hidden–隐藏 */
在com.demo.controller包下的DemoController类中写案例如下:
package com.demo.controller; import com.demo.domain.ResponseMsg; import io.swagger.annotations.*; import org.springframework.web.bind.annotation.*; /** * @author SAM * @create 2018-03-14 上午10:45 **/ @Api(tags = "spring boot 演示接口") @RestController public class DemoController { @ApiOperation(value = "Swagger示例方法",notes = " Idea创建spring boot 项目(2)整合Swagger") @ApiImplicitParams({ @ApiImplicitParam(name = "name",value = "名字",required = true,paramType = "query",dataType = "String",defaultValue = "sam"), @ApiImplicitParam(name = "age",value = "年龄",required = false,paramType = "query",dataType = "int",defaultValue = "4") }) @RequestMapping(value = "/swaggerDemo", method = RequestMethod.POST) public String swaggerDemo(@RequestParam String name,@RequestParam int age) { String result = "name is --->" +name+" age is --->" +age; return result; } @ApiOperation(value = "Lombok示例方法",notes = "Idea创建spring boot 项目(3)集成Lombok") @RequestMapping(value = "/lombokDemo", method = RequestMethod.POST) public ResponseMsg lombokDemo(@ModelAttribute ResponseMsg msg) { //使用了Lombok的totring()方法; System.out.println("ResponseMsg is --->" +msg.toString()); return msg; } } /** @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置" @ApiOperation:用在请求的方法上,说明方法的用途、作用 value="说明方法的用途、作用" notes="方法的备注说明" @ApiImplicitParams:用在请求的方法上,表示一组参数说明 @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面 name:参数名 value:参数的汉字说明、解释 required:参数是否必须传 paramType:参数放在哪个地方 · header --> 请求参数的获取:@RequestHeader · query --> 请求参数的获取:@RequestParam · path(用于restful接口)--> 请求参数的获取:@PathVariable · body(不常用) · form(不常用) dataType:参数类型,默认String,其它值dataType="Integer" defaultValue:参数的默认值 @ApiResponses:用在请求的方法上,表示一组响应 @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息 code:数字,例如400 message:信息,例如"请求参数没填好" response:抛出异常的类 @ApiModel:用于响应类上,表示一个返回响应数据的信息 (这种一般用在post创建的时候,使用@RequestBody这样的场景, 请求参数无法使用@ApiImplicitParam注解进行描述的时候) @ApiModelProperty:用在属性上,描述响应类的属性 */
运行启动类App(快捷键“Shift + F10”)运行成功如下图:
访问swagger页面:http://localhost:8080/swagger-ui.html#/ 如下图:
访问lombokDemo方法,填写数据,点击"Try it out"按钮,返回相应数据,如下图:
同时IDEA控制台输出如下图:
至此,spring boot集成lombok项目演示完毕,如有疑问请在评论回复探讨,希望这篇博客对你有用,谢谢;