在我的代码中,我将使用相同的注释集合(例如Hibernate和Jackson的其他注册表)获得许多这样的getter:
@Transient
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = BaseEntity.JSON_DATETIME_FORMAT)
public LocalDateTime getCreatedDateDT() {
return DateTimeUtils.klabTimestampToLocalDateTime(getCreatedDate(), createdDateDT);
}
我希望通过实现我自己的注释来最小化重复,这将意味着所有这四个一起,如下所示:
@TransientLocalDateTime
public LocalDateTime getCreatedDateDT() {
return DateTimeUtils.klabTimestampToLocalDateTime(getCreatedDate(), createdDateDT);
}
我该怎么办?这甚至可能吗?
更新 感谢Konstantin Yovkov,现在我知道,我可以将所有杰克逊注释合二为一,但这是因为杰克逊的注释处理器能够识别这种技巧。我想知道是否有可能让任何注释处理器这样做?在我看来,它不是。
答案 0 :(得分:7)
Jackson提供了一个元注释(用于注释另一个注释的注释),名为@JacksonAnnotationsInside
,它是:
元注释(用于其他注释的注释)用于 表示不使用目标注释(注释) 用这个注释注释),杰克逊应该使用元注释 它有。
这对于创建"组合注释"非常有用。有一个 容器注释,需要使用此注释进行注释 以及它包含的所有注释'。
所以,你应该创建一个像这样的注释:
@Target(value = { ElementType.TYPE, ElementType.METHOD,
ElementType.PARAMETER, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside // <-- this one is mandatory
@Transient
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = BaseEntity.JSON_DATETIME_FORMAT)
public @interface TransientLocalDateTime {
}
并且使用就像:
@TransientLocalDateTime
public LocalDateTime getCreatedDateDT() {
return DateTimeUtils.klabTimestampToLocalDateTime(getCreatedDate(), createdDateDT);
}