2015-03-12 4 views
2

Я хочу создать две пользовательские атрибуты:как реализовать `Джексон AnnotationIntrospector`?

class A{ 

@IgnoreLevel("Debug") String str1; 

@IgnoreLevel("Info") String str2; 
} 

или как это, если проще:

class A{ 

@Debug String str1; 

@Info String str2; 
} 

И я хочу, чтобы написать конфигурацию, которая заставит ObjectMapper игнорировать

"defug" и "info" , И еще одна конфигурация, чтобы игнорировать поля с «информацией» только при сериализации и де-сериализации.

но все посты я прочитал (post1, post2) не показывают пример того, как реализовать костюм configuration \ AnnotationIntrospector.

ответ

3

Если вы хотите подкласс 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

Смежные вопросы