java开发常用注解详解

一、Lombok

  • @Data注解:在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor、equals、canEqual、hashCode、toString 注解,即当使用当前注解时,会自动生成包含的所有方法;
  • @Accessors(chain = true) 生成标准的get/set方法
  • @getter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法;
  • @setter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法
  • @NoArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法
  • @AllArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法;
  • @ToString注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;
  • @EqualsAndHashCode(callSuper = true)注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法;
  • @Slf4j:在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;
  • @Log4j:在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;在使用以上注解需要处理参数时,处理方法如下(以@ToString注解为例,其他注解同@ToString注解):
  • @ToString(exclude="column")意义:排除column列所对应的元素,即在生成toString方法时不包含column参数;
  • @ToString(exclude={"column1","column2"})意义:排除多个column列所对应的元素,其中间用英文状态下的逗号进行分割,即在生成toString方法时不包含多个column参数;
  • @ToString(of="column")意义:只生成包含column列所对应的元素的参数的toString方法,即在生成toString方法时只包含column参数;
  • @ToString(of={"column1","column2"})意义:只生成包含多个column列所对应的元素的参数的toString方法,其中间用英文状态下的逗号进行分割,即在生成toString方法时只包含多个column参数;

二、JSON

  • @JsonProperty :此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")
  • @JsonIgnore此注解用于属性或者方法上(最好是属性上),用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解,一般标记在属性或者方法上,返回的json数据即不包含该属性;
  • @JsonIgnoreProperties此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响;
  • @JsonFormat此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式;
  • @JsonBackReference,加上此注解的字段,不会被序列化,也就打断了循环依赖,或用@JsonIdentityInfo;
  • @JsonFilter实现实体的动态过滤:​​https://www.jianshu.com/p/2982116ee0ff​​ ;
  • @JsonAppend:动态添加字段;
  • @JsonAlias此注解的作用很大,用于反序列的时候,指定json别名,特别是在对接不同的api的时候,有的接入方的字段是sex,有的是xingbie,有的是gender但是又表示的同一个意思的时候,非常有用。
  • @JsonInclude(JsonInclude.Include.NON_NULL) 4 NON_EMPTY比较常用
当我们在序列一个DTO给到前端的时候,如果说DTO里面的属性很多都是null的。
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 使用默认
  • @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
CamelCase策略,Java对象属性:personId,序列化后属性:persionId
PascalCase策略,Java对象属性:personId,序列化后属性:PersonId
SnakeCase策略,Java对象属性:personId,序列化后属性:person_id
KebabCase策略,Java对象属性:personId,序列化后属性:person-id

三、实体类所用标签推荐

3.1、VO

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class WorkflowVo {
    private static final long serialVersionUID = 1L;
}

3.2、BO

@Data
public class WorkflowBo extends BaseModel{
    
}

3.3、Entity

@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("T_TABLE")
public class WorkflowEntity extends BaseEntity {
    private static final long serialVersionUID = 1L;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

korgs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值