Como usar várias anotações do @RequestMapping na primavera?

247

É possível usar várias @RequestMappinganotações em um método?

Gostar :

@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
  return "welcome";
}
voluntário
fonte

Respostas:

436

@RequestMappingpossui um String[]parâmetro value, portanto, você deve poder especificar vários valores como este:

@RequestMapping(value={"", "/", "welcome"})

Ed Brannin
fonte
2
Dito isto, estou tendo problemas para que os valores "" ou "/" funcionem realmente no meu aplicativo. Eles trabalham para você?
Ed Brannin
Existe uma maneira de associar diferentes visualizações de sucesso e visualizações de formulário a cada URL de solicitação usando várias anotações?
den-k
@EdBrannin eu preciso de muitos para usar, costume, cabeçalho, consome params, etc
DeFreitas
Também gostaria de saber como saber qual chamado requestmapping foi chamado. é / ou bem-vindo?
Siddharth
1
@ Sidarta 1. Você poderá adicionar e inspecionar um parâmetro do tipo HttpRequest. 2. Se você realmente se importa com o chamado mapeamento, talvez não use essa técnica. ;)
Ed Brannin
24

Do meu teste (primavera 3.0.5), @RequestMapping(value={"", "/"}) - só "/"funciona, ""não. No entanto, eu descobri que isso funciona: @RequestMapping(value={"/", " * "})a " * "partidas nada, por isso vai ser o manipulador padrão em caso nenhum outro.

Alan Zhong
fonte
13

Não precisa. A anotação RequestMapping suporta caracteres curinga e caminhos no estilo de formiga. Também parece que você quer apenas uma visualização padrão, para poder colocar

<mvc:view-controller path="/" view-name="welcome"/>

no seu arquivo de configuração. Isso encaminhará todas as solicitações para a raiz para a visualização de boas-vindas.

Robby Pond
fonte
Deveria haver algo entre essas duas linhas? Estou usando o FreeMarkerViewResolver - então eu teria que seguir esse caminho ... Bem, acho que eu poderia criar vários ViewResolver.
wuntee
2
Ele não fornece a flexibilidade que várias anotações do RequestMapping forneceriam. Por exemplo, se eu quiser que um método suporte o valor "/ a" com POST ou o valor "/ b" com GET. É claro que a solução alternativa é bastante fácil (refatorar a funcionalidade em um terceiro método), mas apenas dizendo que seria útil.
simon
1

A maneira mais curta é: @RequestMapping({"", "/", "welcome"})

Embora você também possa fazer:

  • @RequestMapping(value={"", "/", "welcome"})
  • @RequestMapping(path={"", "/", "welcome"})
Marco
fonte
1

No momento, usando o Spring-Boot 2.0.4 - {} não funcionará.

@RequestMapping

ainda possui String [] como parâmetro de valor, portanto, a declaração se parece com isso:

 @RequestMapping(value=["/","/index","/login","/home"], method = RequestMethod.GET)

** Atualização - Funciona com o Spring-Boot 2.2 **

 @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)
Falcão
fonte
Os colchetes são inválidos. A sintaxe válida para um literal de matriz é usar chaves {}
luis.espinal
Os colchetes quadrados trabalharam com a versão 2.0.4 Spring-Boot. Vou atualizar minha postagem.
Falcon
0

Também é aceitável o seguinte:

@GetMapping(path = { "/{pathVariable1}/{pathVariable1}/somePath", 
                     "/fixedPath/{some-name}/{some-id}/fixed" }, 
            produces = "application/json")

O mesmo pode ser aplicado @RequestMappingtambém

Pritam Banerjee
fonte
-2

É melhor usar a anotação PathVariable se você ainda deseja obter a uri que foi chamada.

@PostMapping("/pub/{action:a|b|c}")
public JSONObject handlexxx(@PathVariable String action, @RequestBody String reqStr){
...
}

ou analise-o do objeto de solicitação.

CQLI
fonte