了解Lombok常用注解:@Slf4j与@Log4j、 @AllArgsConstructor、@NoArgsConstructor、@Data,@ApiOperation注解及Swagger与Spring MVC集成步骤及常见注解

一、lombok使用方法

  在pom文件中添加,具体version版本,可以参考maven版本库的中lombok信息。可以查看目前已有的版本,可以选择使用较多的新版本即可。注意:一定要指定版本,如果不指定会使用最新版本,有可能由于版本不稳定造成各种奇奇怪怪的问题。

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.10</version>
    </dependency>

1、@Slf4j与@Log4j

  二者都注解类,可用于打印日志,但是更推荐使用@Slf4j。原因如下:

(1)@Log4j是具体的日志实现。而@Slf4j是一个抽象层,它允许程序使用任意一个日志类库,使程序更加独立。

(2)@Slf4j可以使用占位符"{}",可减少代码中字符串连接次数

2、@AllArgsConstructor、@NoArgsConstructor、@RequiredArgsConstructor

  这三个都在用于注解类,表示自动生成此类的构造器。

  @AllArgsConstructor(包含所有参数的构造器)、

  @NoArgsConstructor(无参构造器)、

  @RequiredArgsConstructor(构造器只包含被final修饰的变量)

  正常情况下,是不需要@NoArgsConstructor的,因为如果不手动建立一个构造函数,系统会为一个类建立一个无参构造器。

  但是,如果手动建立一个非无参的构造函数,就需要@NoArgsConstructor了。同理,如果我们使用@AllArgsConstructor,最好再加上@NoArgsConstructor。

  @NoArgsConstructor和@RequiredArgsConstructor的使用会产生冲突。按情况分析:

  如果类中无final修饰的变量,@RequiredArgsConstructor会构建无参的构造函数

  如果类中有final修饰的变量,且直接赋初始值,@RequiredArgsConstructor会构建无参的构造函数

  如果类中有final修饰的变量,但没有直接赋初始值,构造函数中至少要包括全部的final修饰的变量,不可构建无参的构造函数。

import lombok.NoArgsConstructor;
 
@NoArgsConstructor
public class User{
    private final String name="";
    private String id;
}

// 反编译的结果:
package com.springboot.Entity;
     
public class User {
    private final String name = "";
    private Integer id;
     
    public User() {
    }
}

3、@Data:用于注解类,相当于同时加了如下五个注解

  @Getter 所有变量的get方法

  @Setter 所有变量的set方法

  @ToString 输出这个变量的示例时,直接调用toString方法,输出所有变量的值

  @EqualsAndHashCode 判等时使用,相当于同时加了equal和hashCode两个方法

  @RequiredArgsConstructor 前面介绍过

  如果@Data与@RequiredArgsConstructor加在类上,也不会产生冲突,只是会有代码的冗余。举个例子

import lombok.Data;
 
@Data
public class User{
    private final String name="";
    private Integer id;
}

// 反编译的结果
public class User {
  private final String name = "";
  private Integer id;
 
  public User() {
  }
 
  public String getName() {
    this.getClass();
    return "";
  }
 
  public Integer getId() {
    return this.id;
  }
 
  public void setId(final Integer id) {
    this.id = id;
  }
 
  public boolean equals(final Object o) {
    if (o == this) {
      return true;
    } else if (!(o instanceof User)) {
      return false;
    } else {
      User other = (User)o;
      if (!other.canEqual(this)) {
        return false;
      } else {
        Object this$name = this.getName();
        Object other$name = other.getName();
        if (this$name == null) {
          if (other$name != null) {
            return false;
          }
        } else if (!this$name.equals(other$name)) {
          return false;
        }
 
        Object this$id = this.getId();
        Object other$id = other.getId();
        if (this$id == null) {
          if (other$id != null) {
            return false;
          }
        } else if (!this$id.equals(other$id)) {
          return false;
        }
 
        return true;
      }
    }
  }
 
  protected boolean canEqual(final Object other) {
    return other instanceof User;
  }
 
  public int hashCode() {
    int PRIME = true;
    int result = 1;
    Object $name = this.getName();
    int result = result * 59 + ($name == null ? 43 : $name.hashCode());
    Object $id = this.getId();
    result = result * 59 + ($id == null ? 43 : $id.hashCode());
    return result;
  }
 
  public String toString() {
    return "User(name=" + this.getName() + ", id=" + this.getId() + ")";
  }
}

二、@ApiOperation注解

  实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。

  Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档,同时swagger-ui还可以测试spring restful风格的接口功能。

  官方网站为:http://swagger.io/

  中文网站:http://www.sosoapi.com

1、@ApiOperation注解介绍

  @ApiOperation不是spring自带的注解,而是swagger里的 —— com.wordnik.swagger.annotations.ApiOperation;

  @ApiOperation和@ApiParam为添加的API相关注解,参数说明如下:

  @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”);其他参数可参考源码;

  @ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”)

2、Swagger与Spring MVC集成步骤

(1)Maven关键配置
<dependency>
  <groupId>com.mangofactory</groupId>
  <artifactId>swagger-springmvc</artifactId>
  <version>1.0.2</version>
</dependency>
 
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.1.6.RELEASE</version>
</dependency>

(2)插件配置  CustomJavaPluginConfig

(3)复制swagger的相关js等静态资源到webapp目录。swagger-ui.js之类的。

原文地址:https://www.cnblogs.com/goloving/p/14847473.html