2
respostas

RedirectAtributtes através de Factory

Bom dia galera, tudo certo?

Apesar de já ter terminado o curso, estou fazendo uma aplicação do zero para praticar tudo que tenho estudado, e escolhi o Spring para isto. Como já trabalhei com VRaptor e gostava muito do sistema de redirects e forwards, acabei criando uma classe utilitária para fazer algo similar(não gosto de trabalhar com as strings da URL diretamente):

public class Router {

    public static <T> T access(Class<T> controllerType) {
        return MvcUriComponentsBuilder.controller(controllerType);
    }

    public static String urlFor(Object invocationInfo) {
        return MvcUriComponentsBuilder
                .fromMethodCall(invocationInfo)
                .build()
                .toUriString();
    }

    public static String redirectTo(Object invocationInfo) {
        return "redirect:" + MvcUriComponentsBuilder
                .fromMethodCall(invocationInfo)
                .build()
                .toUriString();
    }

    public static String forwardTo(Object invocationInfo) {
        return "redirect:" + MvcUriComponentsBuilder
                .fromMethodCall(invocationInfo)
                .build()
                .toUriString();
    }
}

Exemplo de utilização:

@RequestMapping(value = "/logout", method = RequestMethod.GET)
    public String logout() {
        return Router.redirectTo(Router.access(AdminLoginController.class).index());
    }

Isto acabou me proporcionando um problema: caso eu precisar de objetos injetados pelos construtores dos métodos(como o RedirectAttributes), acaba inutilizando a minha classe.

Há alguma maneira de eu conseguir acesso a estas classes através de alguma Factory do próprio Spring, ou injetá-la com @Autowired? Pensei em gerar um @Bean para ela, mas para isto preciso de acesso a sua Factory ou construtor.

Pesquisei no tio Google não encontrei a resposta ainda, então decidi perguntar aqui no fórum. :)

Obrigado galera, abraço!

2 respostas

Oi Felippe,

Você está indo muito além do conteúdo do curso realmente. Muito bom.

Creio que com reflection é possível fazer, porém você terá que "reinventar" a parte de navegação do Spring. Eu prefiro usar o padrão do framework mesmo.

Eu sugiro que você publique no GUJ essa dúvida, pois ela é bem avançada e vai além até de SpringMVC.

Pode esperar pra ver se alguém tem uma ideia por aqui também, enquanto espera no GUJ.

Abraço

Fala Paulo, tranquilo ?

Então, geralmente eu também prefiro utilizar os padrões dos próprios frameworks... Mas como a idéia deste projeto é fazer algo com calma, e também aproveitando para estudar(e se divertir! hehehe), estou 'reinventando a roda' para algumas coisas.

Boa idéia, vou postar no GUJ sim.

Obrigado pela atenção, abraços!