Lombok,Swagger,Jackson中的注解汇总
Lombok相关(通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法):#
maven添加依赖或下载jar包:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
常用注解:
@Data
作用:注解在类上,为类的所有属性自动生成setter、getter、equals、canEqual、hashCode、toString方法。
@Getter/@Setter
作用:注解在属性上,为相应的属性自动生成Getter/Setter方法。
@NonNull
作用:注解在属性或构造器上,为属性生成非空声明,校验参数,避免空指针。
@Cleanup
作用:自动调用close()方法。(关闭资源)
@EqualsAndHashCode
作用:注解在类上,生成equals()和hashCode()方法,默认使用非静态,非瞬态的属性,默认仅使用该类中定义的属性且不调用父类的方法,可通过参数exclude排除一些属性,可通过参数of指定仅使用哪些属性。
(exclude={"id", "shape"})//排除一些属性
(callSuper=true)//让其生成的方法中调用父类的方法,默认是不使用父类的属性,可能导致问题。
@ToString
作用:注解在类上,生成toString()方法,默认会输出类名,所有属性,用逗号分隔。
修饰符和类型 | 可选元素 | 描述 |
---|---|---|
boolean |
callSuper |
toString 在输出中包含超类实现的结果。 |
boolean |
doNotUseGetters |
通常情况下,如果 getters 是可用的,那么被调用。 |
java.lang.String[] |
exclude |
这里列出的任何字段将不会被打印在生成的toString 实现中。 |
boolean |
includeFieldNames |
在打印时包括每个字段的名称。 |
java.lang.String[] |
of |
如果存在,明确列出要打印的字段。 |
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
作用:注解在类上,无参构造器、部分参数构造器、全参构造器。
Swagger相关(自动生成API文档):#
Maven添加依赖:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
在application同级目录新建swagger2文件,添加swagger2配置类
package com.wtw.config;
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.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Swagger2配置类
* 在与spring boot集成时,放在与Application.java同级的目录下。
* 通过@Configuration注解,让Spring来加载该类配置。
* 再通过@EnableSwagger2注解来启用Swagger2。
*/
@Configuration
@EnableSwagger2
public class Swagger2 {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录。
* 还可以扫描注解来定义
return docket.apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)).paths(PathSelectors.any()).build();
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.abel.example.controller"))
.paths(PathSelectors.any())
.build();
}
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://项目实际地址/swagger-ui.html
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2构建RESTful APIs")
.description("描述信息")
.termsOfServiceUrl("项目地址")
.contact("wtw")
.version("1.0")
.build();
}
}
通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)
@Api(value="",tags="")
作用:放置于controller的一个类上,标志这个类是swagger资源
@ApiOperation()
作用:作用于方法之上,表示是一个http的请求
参数名称 | 参数介绍 |
---|---|
value | 方法描述 |
notes | 方法描述详情 |
tags | 标签,可继承类的标签 |
response | 返回类型 |
httpMethod | 请求方法 |
@ApiParam()
作用:作用于方法,用于参数字段的说明
参数名称 | 参数介绍 |
---|---|
name | 参数名称 |
value | 参数解释 |
required | 是否必需 |
@ApiModel()
作用:作用于类,对类进行说明,用于实体类接收或者返回
参数名称 | 参数介绍 |
---|---|
value | 对象名 |
description | 对象描述 |
@ApiModelProperty()
作用:作用于实体类,用于实体类中某个字段
参数名称 | 参数解释 |
---|---|
value | 参数解释 |
name | 参数名称 |
dataType | 属性类型 |
required | 是否必填 |
example | 示例 |
hidden | 隐藏 |
@ApiImplicitParams()
作用:作用于方法之上,解释请求参数里边添加@ApiImplicitParam()注解
参数名称 | 参数解释 |
---|---|
name | 参数名称 |
value | 参数解释 |
paramType | 参数类型 |
required | 是否必需 |
Jackson相关( json 解析器之一,用来序列化和反序列化 json 的 Java 的开源框架):#
用法详解:https://cloud.tencent.com/developer/article/1662931
Maven添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
Read + Write注解(影响从JSON读取Java对象以及将Java对象写入JSON)#
@JsonIgnore
作用:写在属性上,在将JSON读取到Java对象中以及将Java对象写入JSON时,都将忽略该属性。
@JsonIgnoreProperties
作用:写在类上,作用与@jsonIgnore一致,区别是用于指定要忽略的类的属性列表。
@JsonIgnoreType
作用:写在类上,所有该类的实例都将被忽略。
@JsonAutoDetect
作用:写在类上,告诉Jackson在读写对象时包括非public修饰的属性。
JsonAutoDetect.Visibility类包含与Java中的可见性级别匹配的常量,表示ANY,DEFAULT,NON_PRIVATE,NONE,PROTECTED_AND_PRIVATE和PUBLIC_ONLY。
Read注解(仅影响Jackson将JSON解析为对象的方式)#
@JsonSetter
作用:写在setter方法上,为给定的JSON字段使用setter方法,将JSON读入对象时,将此setter方法的名称与JSON数据中的属性名称相匹配,Java类内部使用的属性名称与JSON文件中使用的属性名称不同,就用到它。
@JsonAnySetter
作用:写在setter方法上,为JSON对象中所有无法识别的字段调用相同的setter方法
@JsonCreator
作用:写在构造方法上,用于告诉Jackson该Java对象具有一个构造函数(“创建者”),该构造函数可以将JSON对象的字段与Java对象的字段进行匹配,还必须注解构造函数的参数,以告诉Jackson将JSON对象中的哪些字段传递给哪些构造函数参数。
添加了@JsonCreator和@JsonProperty注解的PersonImmutable类的示例如下:
public class PersonImmutable {
private long id = 0;
private String name = null;
@JsonCreator
public PersonImmutable(
@JsonProperty("id") long id,
@JsonProperty("name") String name ) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
}
@JacksonInject
作用:写在属性上,用于将值注入到解析的对象中,而不是从JSON中读取这些值。
@JsonDeserialize
作用:写在属性上,为Java对象中给定的属性指定自定义反序列化器类。
Write注解(影响Jackson将Java对象序列化(写入)到JSON的方式)#
@JsonInclude
作用:写在类上,告诉Jackson仅在某些情况下包括属性。即什么条件包含该属性。
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonGetter
作用:告诉Jackson,应该通过调用getter方法而不是通过直接字段访问来获取某个字段值。
@JsonAnyGetter
作用:写在方法上,将Map用作要序列化为JSON的属性的容器,Map中的所有键值对都将作为对象的一部分序列化为JSON。
@JsonPropertyOrder
作用:写在类上,可用于指定将Java对象的字段序列化为JSON的顺序。
@JsonRawValue
作用:写在属性上,告诉Jackson该属性值应直接写入JSON输出。
@JsonValue
作用:写在方法上,告诉Jackson,Jackson不应该尝试序列化对象本身,而应在对象上调用将对象序列化为JSON字符串的方法。
@JsonSerialize
作用:写在属性上,用于为Java对象中的字段指定自定义序列化程序。
@JsonProperty
作用:写在属性上,把属性的名称序列化时转换为另外一个名称。
@JsonFormat
作用:写在属性或者方法上,把属性的格式序列化时转换成指定的格式。
@JsonFormat(timezone ="GMT+8", pattern = "yyyy-MM-dd HH:mm")
public Date getBirthDate()
作者:恋R
出处:https://www.cnblogs.com/wutiwang/p/14473893.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
一点一滴,终将汇成江流大河。