• 了解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之类的。

  • 相关阅读:
    Centos7新特性——systemd取代init管理服务
    Git初探
    Nginx内置变量
    Nginx初探
    PHP多进程初步
    golang消息队列nsq
    golang 的 go异步编程通道要注意的问题
    golang 连接池mysql
    golang centos运行方法
    golang go path和go mod的区别
  • 原文地址:https://www.cnblogs.com/goloving/p/14847473.html
Copyright © 2020-2023  润新知