¿Cuál es la diferencia entre @RequestParam
y @PathVariable
mientras maneja caracteres especiales?
+
fue aceptado por @RequestParam
como espacio.
En el caso de @PathVariable
, +
fue aceptado como +
.
fuente
¿Cuál es la diferencia entre @RequestParam
y @PathVariable
mientras maneja caracteres especiales?
+
fue aceptado por @RequestParam
como espacio.
En el caso de @PathVariable
, +
fue aceptado como +
.
@PathVariable
es obtener algún marcador de posición del URI (Spring lo llama una plantilla de URI) - vea Spring Reference Capítulo 16.3.2.2 Patrones de plantilla de URI@RequestParam
es obtener un parámetro del URI también; consulte el Capítulo 16.3.3.3 de Spring Reference, parámetros de solicitud de enlace a parámetros de método con @RequestParamSi la URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
recibe las facturas para el usuario 1234 el 5 de diciembre de 2013, el método del controlador se vería así:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
Además, los parámetros de solicitud pueden ser opcionales y, a partir de Spring 4.3.3, las variables de ruta también pueden ser opcionales . Sin embargo, tenga cuidado, esto podría cambiar la jerarquía de la ruta URL e introducir conflictos de asignación de solicitudes. Por ejemplo, ¿ /user/invoices
proporcionaría las facturas para el usuario null
o detalles sobre un usuario con ID "facturas"?
@PathVariable
se puede usar en cualquier RequestMethod@PathParam
funciona solo si hay un marcador de posición en la plantilla de uri)@PathParam
es una anotación javax.ws.rs. docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.htmlAnotación @RequestParam utilizada para acceder a los valores de los parámetros de consulta desde la solicitud. Mire la siguiente URL de solicitud:
En la solicitud de URL anterior, se puede acceder a los valores para param1 y param2 de la siguiente manera:
La siguiente es la lista de parámetros admitidos por la anotación @RequestParam:
@PathVariable
@ PathVariable identifica el patrón que se utiliza en el URI para la solicitud entrante. Veamos la siguiente URL de solicitud:
La solicitud de URL anterior se puede escribir en su Spring MVC de la siguiente manera:
La anotación @ PathVariable solo tiene un valor de atributo para vincular la plantilla de URI de solicitud. Está permitido usar la anotación multiple @ PathVariable en el método único. Pero asegúrese de que no más de un método tenga el mismo patrón.
También hay una anotación más interesante: @MatrixVariable
Y el método del controlador para ello
Pero debes habilitar:
fuente
userName
tener un tipo param o no? Me inclino por convertirlo en una variable, pero también podría ser un parámetro.@PathParam
y@RequestParam
ser declarado sin usar@RequestMapping
@RequestParam se utiliza para parámetros de consulta (valores estáticos) como: http: // localhost: 8080 / calculation / pow? Base = 2 & ext = 4
@PathVariable se usa para valores dinámicos como: http: // localhost: 8080 / calculation / sqrt / 8
fuente
1)
@RequestParam
se utiliza para extraer parámetros de consultawhile
@PathVariable
se usa para extraer datos directamente del URI:2)
@RequestParam
es más útil en una aplicación web tradicional donde los datos se pasan principalmente en los parámetros de consulta, mientras que@PathVariable
es más adecuado para los servicios web RESTful donde la URL contiene valores.3) la
@RequestParam
anotación puede especificar valores predeterminados si un parámetro de consulta no está presente o vacío mediante el uso de undefaultValue
atributo, siempre que el atributo requerido seafalse
:fuente
fuente
Ambas anotaciones se comportan exactamente de la misma manera.
Solo 2 caracteres especiales '!' y '@' son aceptados por las anotaciones @PathVariable y @RequestParam.
Para verificar y confirmar el comportamiento, he creado una aplicación de arranque de resorte que contiene solo 1 controlador.
Al presionar las siguientes solicitudes obtuve la misma respuesta:
! @ se recibió como respuesta en ambas solicitudes
fuente
puede ser que la aplicación / x-www-form-urlencoded tipo midia convierta el espacio a + , y el receptor decodificará los datos convirtiendo el + al espacio. verifique la url para obtener más información. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
fuente