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).

Foi útil?

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";
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top