Mik*_*cer 7 java annotations hibernate jackson
在我的代码中,我将使用相同的注释集(有一个用于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);
}
Run Code Online (Sandbox Code Playgroud)
我希望通过实现我自己的注释来最小化重复,这将意味着所有这四个一起,如下所示:
@TransientLocalDateTime
public LocalDateTime getCreatedDateDT() {
return DateTimeUtils.klabTimestampToLocalDateTime(getCreatedDate(), createdDateDT);
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?这甚至可能吗?
更新 感谢Konstantin Yovkov,现在我知道,我可以将所有杰克逊注释合二为一,但这是因为杰克逊的注释处理器能够识别出这样的技巧.我想知道是否有可能让任何注释处理器这样做?在我看来,事实并非如此.
杰克逊提供了一个元注释(用于注释另一个注释的注释),称为@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 {
}
Run Code Online (Sandbox Code Playgroud)
并且使用就像:
@TransientLocalDateTime
public LocalDateTime getCreatedDateDT() {
return DateTimeUtils.klabTimestampToLocalDateTime(getCreatedDate(), createdDateDT);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1427 次 |
最近记录: |