簡體   English   中英

Java自定義注釋不可見

[英]Java custom annotation not visible

對於我的項目,我正在使用jackson fastXml將類轉換為json。 現在,我必須在一個地方更改對象轉換的方式,以便忽略@JsonIgnore並序列化屬性。

我發現可以通過擴展JacksonAnnotationIntrospector和自定義注釋來做到這一點。 問題在於,只有在與實現類在同一包/項目/ osgi包中定義了自定義批注的情況下,該自定義批注才可見,而我想在公開json轉換的服務包中對其進行定義。 如果注釋在實現包中,則無法在JacksonAnnotationIntrospector中引用它,我需要檢查注釋的名稱。

我有兩個完全相同的注釋,只是包裝不同:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationName {

}

當在實現上同時設置兩者時,我只能看到與實現類在同一包/項目/ osgi包中定義的注釋。 是否對此有限制,或者有人知道可能是什么問題?

理想情況下,最好使用您控制的反向域名將自定義注釋放入唯一的程序包中。 將其放入一個單獨的API捆綁包中(至少現在是這樣)。

在用戶代碼中,將API捆綁包添加到maven依賴項,並使用新的注釋。 maven-bundle-plugin(或您使用的工具)應在清單中創建一個Import-Package語句。 這將確保注釋可以在運行時進行連接。

在解析批注的代碼中,確保使用用戶捆綁包的類加載器。 這個類加載器應該能夠看到標准注釋和自定義注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM