Estou enviando alguns parâmetros de um formulário desta maneira:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Eu sei que posso obter todos os parâmetros no método do controlador adicionando um parâmetro como
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Eu quero vincular os parâmetros myParam [] (não os outros) a uma lista ou matriz (qualquer coisa que mantenha a ordem do índice), então tentei com uma sintaxe como:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
e
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
mas nenhum deles está vinculando os myParams. Mesmo quando adiciono um valor ao mapa, ele não pode vincular os parâmetros:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Existe alguma sintaxe para vincular alguns parâmetros a uma lista ou matriz sem precisar criar um objeto como @ModelAttribute com um atributo de lista?
obrigado
HandlerMethodInvoker.resolveRequestParam
só já recebe o primeiro valormethod = RequestMethod.GET
oumethod = RequestMethod.POST
? Se.GET
@RequestParam List<String> groupVal
cumprido com?groupVal=kkk,ccc,mmm
êxito ( Spring Boot )Respostas:
Matrizes em
@RequestParam
são usadas para vincular vários parâmetros com o mesmo nome:Se você precisar vincular
@ModelAttribute
parâmetros indexados no estilo, acho que precisa@ModelAttribute
.fonte
Ou você pode fazer dessa maneira:
Isso funciona, por exemplo, para formulários como este:
Esta é a solução mais simples :)
fonte
List<String>
através disso. Também é possível obter um feijão java comoList<MyBean>
Apenas complementando o que Donal Fellows disse, você pode usar a Lista com @RequestParam
Espero que ajude!
fonte
Inscrevendo o que o manjericão disse em um comentário à própria pergunta, se
method = RequestMethod.GET
você puder usar@RequestParam List<String> groupVal
.Em seguida, chamar o serviço com a lista de parâmetros é tão simples quanto:
fonte
Uma maneira de conseguir isso (de uma maneira imprudente) é criar uma classe de wrapper para o
List
. Como isso:Em seguida, sua assinatura do método do controlador ficaria assim:
Não é necessário usar a anotação
@RequestParam
ou@ModelAttribute
se o nome da coleção que você passar na solicitação corresponder ao nome do campo de coleção da classe wrapper, no meu exemplo, os parâmetros da sua solicitação devem ter a seguinte aparência:fonte
Não era óbvio para mim que, embora você possa aceitar uma coleção como um parâmetro de solicitação, mas no lado do consumidor você ainda precisa passar os itens da coleção como valores separados por vírgula .
Por exemplo, se a API do lado do servidor estiver assim:
Passar diretamente uma coleção para o RestTemplate como um RequestParam como abaixo resultará em corrupção de dados
Em vez disso, você pode usar
O exemplo completo pode ser encontrado aqui , espero que isso evite dores de cabeça para alguém :)
fonte
Altere o valor do campo oculto com a caixa de seleção, como abaixo ...
HTML:
Roteiro:
fonte