• SpringBoot开发环境常用注解(含java自带注解)


    springBoot常用注解

    SpringBoot注解

    Jackson相关注解

    @JsonProperty

    • 将sex序列化成gender
    @JsonProperty(value = "gender")
           private String sex;
    序列化结果就变成了
    {
      "name" : "小刘",
      "gender" : "男"
    }
    
    • 还可以给序列化的字段指定序列化的顺序,序号越小越靠前
           @JsonProperty(value = "gender",index = 1)
           private String sex;
            @JsonProperty(value = "cname",index = 2)
           private String name;
    序列化结果如下
    {
      "gender" : "男",
      "cname" : "小刘"
    }
    
    • 对属性设置序列化权限READ_ONLY、WRITE_ONLY、READ_WRITE
      在pojo有些特殊的属性,比如id属性,一般来说我们序列化的时候可以序列化掉,但是反序列化的时候我们希望忽略该字段,因为该id字段可能不安全,这样的id我们称为READ_ONLY的,相反的只用在反序列化,而序列化的时候不输出的字段我们称为WRITE_ONLY(Write_only不参与序列化)。还有些字段不管自否可见,都要可以序列化和反序列化,我们称为READ_WRITE。
          @JsonProperty(value = "gender",index = 1,access = JsonProperty.Access.READ_ONLY)
           private String sex;
            @JsonProperty(value = "cname",index = 2,access = JsonProperty.Access.WRITE_ONLY)
           private String name;
    序列化结果如下
    {
      "gender" : "男"
    }
    

    @JsonPropertyOrder

    • @JsonPropertyOrder主要提供在类上的直接,指定序列化的顺序
     @JsonPropertyOrder({"unknown","cname","gender"})
        class JsonPropertyPojo{
    
            @Getter
            @Setter
           @JsonProperty(value = "gender")
           private String sex;
            @Getter
            @Setter
            @JsonProperty(value = "cname")
           private String name;
            @JsonProperty(access = JsonProperty.Access.READ_WRITE)
            private String unknown;
    
        }
    

    我们直接的在类上执行了序列化的顺序,如果有字段没有指定,默然排在指定了顺序的字段之后

    @JsonInclude过滤无用信息

    • 链接:JsonInclude注解
    • 为null的数据序列化之后,对前端来说,没有任何的意义,在序列化的时候我们可以使用@JsonInclude将这个为null的字段去除

    @JsonInclude注解提供了四个属性

    • value
      一般来说,pojo中只有简单的属性的话,只需要使用此value配置就可以了
    • content
      在pojo中可能包含复杂的复合对象,比如map和optional,需要进一步的判断此复合对象的内容是否为空的时候,就可以使用到此配置
    • valueFilter
      如果Jackson提供的value配置都不能满足你的要求的话,我们可以自定义value的过滤器,由我们自己来决定哪些字段是否序列化
    • contentFilter
      如果Jackson提供的content配置都不能满足你的要求的话,我们可以自定义content的过滤器,由我们自己来决定哪些复杂的复合属性是否序列化

    序列化策略

    1 ALWAYS 默认级别,所有的pojo的属性都会被序列化
    2 NON_NULL 只有非null的属性才会被序列化
    3 NON_ABSENT java中有些复杂的数据结构,比如AtomicReference或是Optional,如果某个属性是这个类型,虽然此属性不为null,但是其包装的内容是null的,此注解的作用是,只有此属性不为null,且其包装的内容是有值的才会被序列化
    4 NON_EMPTY 不为空,有些属性如果是Collection或是Map或是Timestamp等,比如某个属性是Timestamp且其值是0,那么可以认为这个属性是empty
    5 NON_DEFAULT 只有此属性不为默认值的时候,才序列化
    6 CUSTOM 自定义,filter定义的过滤器需要重写equals方法,如果返回false,那么进行序列化,如果为true,就不序列化
    7 USE_DEFAULTS 使用默认

    lombok相关注解

    最全的 lombok 注解详情(随着版本不定时更新)

    @Data、@Getter、@Setter

    使用方法

    1. 在pom.xml中导入依赖包

      org.projectlombok
      lombok
      1.18.4
      provided

      导入后,如果还无法使用,按照第二个步骤继续操作

    2. 在idea中导入lombok插件
      步骤:file->setting->Plugins->Marketplace->搜索lombok安装重启

    @Data

    @Data注解包含了@Getter@Setter,且有toString(),equals,hashcode等方法

    @Getter、@Setter

    包含了Getter和setter方法
    :手动编写的setter、getter方法将会覆盖自动生成的getter、setter代码

    @AllArgsConstructor和@NoArgsConstructor

    它是lombok中的注解,作用在类上;
    使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
    对应的 @NoArgsConstructor 是添加一个无参数的构造器,一般使用@Builder注解时同时会使用@AllArgsConstructor和@NoArgsConstructor

    @NotNull和@Nullable

    • 作用于方法上、参数上、字段上
    • @NotNull表示传入的值不可以为null,否则发出提示警告
    • @Nullable则表示传入的值可以为null,不会发出提示警告
    • 提示警告图示

    @Deprecated

    @Deprecated是java内置注解,此注解可以用在方法,属性,类上,表示不推荐程序员使用,但是还可以使用

  • 相关阅读:
    How Many Tables 并查集(求有几个集合)
    Spell checker 字典树&&普通查找(加计数)
    昂贵的聘礼 dijstra算法(要枚举源点)
    All in All 找子串 水题
    Ultra-QuickSort 求逆序对 归并排序
    Snowflake Snow Snowflakes 根据相似度排序,有点暴力
    Gold Balanced Lineup hash函数,第一次接触,借鉴了大神的博客思想,看了很久才看懂,弱菜啦
    Stockbroker Grapevine 裸的floyd算法,求最大中的最小
    Check the difficulty of problems 概率dp,概率知识很重要
    [leetcode] Valid Anagram 、 Find All Anagrams in a String
  • 原文地址:https://www.cnblogs.com/psyduck/p/16336150.html
Copyright © 2020-2023  润新知