Use parte do URL como argumento para um controlador no MVC da primavera
-
20-09-2019 - |
Pergunta
Por exemplo, com o URL
foo.com/bar/99
99 estará disponível diretamente para um método no controlador como argumento. O controlador é mapeado para /bar
Para qualquer pessoa familiarizada com o ASP.NET MVC ou DJANGO, isso seria semelhante às rotas.
Seria possível processar os dados no objeto Solicitação HTTP diretamente para obtê-lo, mas eu gostaria de saber se o Spring MVC possui suporte interno para isso (particularmente a versão 2.5).
Solução
Não, a primavera não suporta isso fora da caixa. Você pode, no entanto, mapear o caminho para o método nome usando @RequestMapping e configurado adequadamente InternalPathMethodNameResolver
:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
Você terá que especificar prefix
por InternalPathMethodNameResolver
Como "fazer" para que o acima funcionar, pois os nomes dos métodos não podem começar com o dígito. Se você usasse "foo.com/bar/baz" como URL e ligue para o seu método baz
, nenhuma configuração adicional seria necessária.
Se você não quiser usar o mapeamento do nome do método, obter '99' como o parâmetro é tão fácil quanto pegá -lo request.getPathInfo()
em seu método.
Outras dicas
Para quem estiver usando a primavera 3, aprendi que isso pode ser feito usando a nova anotação @pathvairable
Aqui está o exemplo de http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}