Lombok,Swagger,Jackson中的注解汇总

发布时间 2023-12-28 10:36:34作者: 全琪俊

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