Я хочу создать аннотацию, чтобы Джексон игнорировал аннотированные поля, если не установлен определенный уровень трассировки:
public class A {
@IgnoreLevel("Debug") String str1;
@IgnoreLevel("Info") String str2;
}
Или, если это легче реализовать, у меня также могут быть отдельные аннотации для разных уровней:
public class A {
@Debug String str1;
@Info String str2;
}
В зависимости от конфигурации ObjectMapper
, либо
Я полагаю, что это должно быть возможно с пользовательским AnnotationIntrospector
. У меня есть этот пост, но он не показывает пример того, как реализовать пользовательский AnnotationIntrospector
.
Если вы хотите подклассом JacksonAnnotationIntrospector
, вам просто нужно переопределить hasIgnoreMarker
, что-то вроде:
@Override
public boolean hasIgnoreMarker(AnnotatedMember m) {
IgnoreLevel lvl = m.findAnnotation(IgnoreLevel.class);
// use whatever logic necessary
if (level.value().equals("Debug")) return true;
return super.hasIgnoreMarker();
}
но обратите внимание, что интроспекция аннотаций происходит только один раз для каждого класса, поэтому вы не можете динамически изменять критерии, которые вы используете.
Для более динамической фильтрации вы можете скорее использовать функциональность JSON Filter, см., например: http://www.cowtowncoder.com/blog/archives/2011/09/entry_461.html