Java自定义注释不可见

时间:2017-07-31 08:49:00

标签: java annotations jackson osgi

对于我的项目,我使用jackson fasterXml将类转换为json。 现在我必须在一个地方改变对象的转换方式,以便忽略@JsonIgnore并且序列化属性。

我发现我可以通过扩展JacksonAnnotationIntrospector和自定义注释来完成此操作。问题是自定义注释只有在与实现类相同的package / project / 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 {

}

当我在实现上设置两者时,我只看到在与实现类相同的package / project / osgi包中定义的注释。 是否存在约束,或者有人知道可能存在什么问题?

1 个答案:

答案 0 :(得分:1)

使用您控制的反向域名理想地将自定义注释放在唯一的包中。将它放入一个单独的API包中(至少目前为止)。

在您的用户代码中,将API包添加到maven依赖项并使用新注释。 maven-bundle-plugin(或你使用的)应该在你的Manifest中创建一个Import-Package语句。这将确保注释可以在运行时连接。

在解析注释的代码中,请确保使用用户包的类加载器。这个类加载器应该能够看到标准注释以及自定义注释。