jingle
#1
Oi não estou entendendo porque nao ta chegando minha annotation na interceptor… preciso annotar algo na minha annotation?
meu interceptor:
[code]
@Override
public boolean accepts(ResourceMethod method) {
// intercepta todos.
Annotation[] methodAnnotations = method.getMethod().getAnnotations();
for (Annotation methodAnnotation : methodAnnotations) {
if (methodAnnotation.getClass().equals(NotLoggedIn.class)) {
return false;
}
}
Annotation[] classAnnotations = method.getMethod().getDeclaringClass()
.getAnnotations();
for (Annotation classAnnotation : classAnnotations) {
if (classAnnotation.getClass().equals(NotLoggedIn.class)) {
return false;
}
}
return true;
}[/code]
já tentei :
Também não veio nada, vem só as annotation que tem do v-raptor (resource, paht…)
minha annotation não tem nada implementado.
[code]public @interface NotLoggedIn {
}[/code]
Insira na sua annotation:
@Retention(RetentionPolicy.RUNTIME)
aqui há um exemplo
http://vraptor.caelum.com.br/cookbook/interceptando-recursos-anotados/
mas provavelmente o seu problema é o que o colega acima falou
vc precisa colocar na sua anotação, alem do retention, o target…
e um jeito melhor de verificar se a anotação existe é:
public boolean accepts(ResourceMethod method) {
return method.containsAnnotation(NotLoggedIn.class);
}
assim, tanto se a anotação estiver no método ou na classe da lógica, isso vai retornar true…
se vc quiser usar anotação só no método:
public boolean accepts(ResourceMethod method) {
return method.getMethod().isAnnotationPresent(NotLoggedIn.class);
}
jingle
#5
valeu funcionou com só com o retention pra que serve o target??
valeu pelas dica vo usa dessa forma.
o @Target na anotação diz onde ela pode ser usada, pode ser no método, na classe, no atributo, parametro de método, etc