Como eu posso fazer para pegar todos os mapeamentos e respectivos métodos no vraptor ?
[]s
Como eu posso fazer para pegar todos os mapeamentos e respectivos métodos no vraptor ?
[]s
Você quer do vraptor ou da sua aplicação que usa vraptor? Se for de sua aplicação você pode usar o Router.
@garcia-jj
Obrigado, funcionou! Mas preciso ir um passo além
veja nesse miniexemplo
@Get @Path("/routes")
public void routes() {
System.out.println("-- All Routes --");
for (Route route : this.router.allRoutes()) {
System.out.println(" >> "+route.toString());
// retorna
// >> [FixedMethodStrategy: uri /listar methods [GET]]
}
}
como eu faço para pegar o metodo a qual está relacionado?
na inicialização do vraptor aparece: /listar - --> public void com.edufa.controller.CategoriaController.listarCategorias()
eu quero pegar o 'public void com.edufa.controller.CategoriaController.listarCategorias()'
e se não for pedir o ideal seria o method (java.lang.Method) respectivo.
[]s
O lucas já me passou essa configuração outro dia. Vou pesquisar no histórico e já te digo.
Achei
http://guj.com.br/posts/list/140708.java#757710
http://www.guj.com.br/posts/list/141706.java#763506
@garcia-jj
ótimo … é bem isso, uma mão na roda esses links.
Com os links que vc passou eu consegui pegar todos os methods, incluindo a seguinte função.
public Set<Method> getLogics() {
Set<Method> result = new HashSet<Method>();
for (Class<?> resource : resourcesMap.keySet())
result.addAll(this.getLogics(resource));
return result;
}
Agora falta achar como relacionar um Method com o Route (1 ou mais). A maneira mais correta seria ler as anotações (@Path) do Method e montar um Map<Method, Set><String>> ?
Pq preciso mostrar os paths e o Controller e Method respectivo.
[]s
Se vc criar a classe abaixo, vc consegue gerar essas informações no startup da aplicação:
@Component
@ApplicationScoped
public class ResourcesHandler implements StereotypeHandler {
public Class<? extends Annotation> stereotype() {
return Resource.class;
}
public void handle(Class<?> type) {
//todos os controllers passarão por aqui, é só pegar as informações que vc quer e guardar em algum lugar pra pesquisar depois...
}
}
ou ainda, tendo posse do Router (meio feio, mas):
List<Route> routes = router.allRoutes();
for(Route route : routes) {
Mirror mirror = new Mirror();
ResourceMethod method = mirror.on(route).get().field("resourceMethod");
String uri = mirror.on(route).get().field("originalUri");
//guarda em algum lugar method.getMethod() e uri
}