Qual é a diferença entre @RequestParam
e @PathVariable
ao lidar com caracteres especiais?
+
foi aceito por @RequestParam
como espaço.
No caso de @PathVariable
, +
foi aceito como +
.
java
spring
spring-mvc
user1857181
fonte
fonte
@PathVariable
pode ser usado em qualquer RequestMethod@PathParam
só funciona se houver um espaço reservado no modelo uri)@PathParam
é uma anotação javax.ws.rs. docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.htmlA anotação @RequestParam usada para acessar os valores dos parâmetros de consulta da solicitação. Veja o seguinte URL de solicitação:
Na solicitação de URL acima, os valores para param1 e param2 podem ser acessados como abaixo:
A seguir, é apresentada a lista de parâmetros suportados pela anotação @RequestParam:
@PathVariable
@ PathVariable identifica o padrão usado no URI para a solicitação recebida. Vamos dar uma olhada no URL de solicitação abaixo:
A solicitação de URL acima pode ser gravada no seu Spring MVC como abaixo:
A anotação @ PathVariable possui apenas um valor de atributo para vincular o modelo de URI da solicitação. É permitido usar a anotação @ PathVariable múltipla no método único. Mas assegure-se de que não mais de um método tenha o mesmo padrão.
Também há mais uma anotação interessante: @MatrixVariable
E o método Controller para isso
Mas você deve ativar:
fonte
userName
tem um tipo param ou não? Estou inclinado a torná-lo uma variável, mas também pode ser um parâmetro.@PathParam
e@RequestParam
ser declarado sem usar@RequestMapping
@RequestParam é usado para o parâmetro de consulta (valores estáticos) como: http: // localhost: 8080 / calculation / pow? Base = 2 & ext = 4
@PathVariable é usado para valores dinâmicos como: http: // localhost: 8080 / calculation / sqrt / 8
fonte
1)
@RequestParam
é usado para extrair parâmetros de consultawhile
@PathVariable
é usado para extrair dados diretamente do URI:2)
@RequestParam
é mais útil em um aplicativo da web tradicional em que os dados são passados principalmente nos parâmetros de consulta, enquanto@PathVariable
é mais adequado para serviços da web RESTful nos quais a URL contém valores.3) a
@RequestParam
anotação pode especificar valores padrão se um parâmetro de consulta não estiver presente ou vazio usando umdefaultValue
atributo, desde que o atributo necessário sejafalse
:fonte
fonte
Ambas as anotações se comportam exatamente da mesma maneira.
Apenas 2 caracteres especiais '!' e '@' são aceitos pelas anotações @PathVariable e @RequestParam.
Para verificar e confirmar o comportamento, criei um aplicativo de inicialização por mola que contém apenas 1 controlador.
Atingindo as seguintes solicitações, obtive a mesma resposta:
! @ foi recebido como resposta nos dois pedidos
fonte
pode ser que o tipo de mídia de aplicativo / x-www-form-urlencode converta o espaço em + e o receptor decodifique os dados convertendo o + em space.check o url para obter mais informações. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
fonte