requestparam requestmethod requestmapping query method how example annotation java spring spring-mvc

java - requestmethod - @RequestParam vs @PathVariable



spring @param (5)

¿Cuál es la diferencia entre @RequestParam y @PathVariable al manejar caracteres especiales?

+ fue aceptado por @RequestParam como espacio.

En el caso de @PathVariable , + fue aceptado como + .


@RequestParam se usa para el parámetro 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

@RequestMapping(value="/pow", method=RequestMethod.GET) public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){ int pow = (int) Math.pow(base1, ext1); return pow; } @RequestMapping("/sqrt/{num}") public double sqrt(@PathVariable(value="num") int num1){ double sqrtnum=Math.sqrt(num1); return sqrtnum; }



@RequestParam anotación utilizada para acceder a los valores de los parámetros de consulta desde la solicitud. Mira la siguiente URL de solicitud:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

En la solicitud de URL anterior, se puede acceder a los valores de param1 y param2 de la siguiente manera:

public String getDetails( @RequestParam(value="param1", required=true) String param1, @RequestParam(value="param2", required=false) String param2){ ... }

La siguiente es la lista de parámetros admitidos por la anotación @RequestParam:

  • valor predeterminado : este es el valor predeterminado como mecanismo de recuperación si la solicitud no tiene el valor o está vacía.
  • nombre - Nombre del parámetro a enlazar
  • obligatorio - si el parámetro es obligatorio o no. Si es cierto, fallar en enviar ese parámetro fallará.
  • valor - Este es un alias para el atributo de nombre

@PathVariable

@ PathVariable identifica el patrón que se usa en el URI para la solicitud entrante. Veamos la siguiente URL de solicitud:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

La solicitud de URL anterior se puede escribir en su Spring MVC de la siguiente manera:

@RequestMapping("/hello/{id}") public String getDetails(@PathVariable(value="id") String id, @RequestParam(value="param1", required=true) String param1, @RequestParam(value="param2", required=false) String param2){ ....... }

La anotación @ PathVariable tiene solo un valor de atributo para vincular la plantilla de URI de solicitud. Se permite utilizar la anotación @ PathVariable múltiple 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

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07

Y el método del controlador para ello.

@RequestMapping(value = "/{stocks}", method = RequestMethod.GET) public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) { logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars }); List<List<String>> outlist = map2List(matrixVars); model.addAttribute("stocks", outlist); return "stocks"; }

Pero debes habilitar:

<mvc:annotation-driven enableMatrixVariables="true" >


@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request @RequestParam - must be passed as method parameter (optional based on the required property) http://localhost:8080/employee/call/7865467 @RequestMapping(value=“/call/{callId}", method = RequestMethod.GET) public List<Calls> getAgentCallById( @PathVariable(“callId") int callId, @RequestParam(value = “status", required = false) String callStatus) { } http://localhost:8080/app/call/7865467?status=Cancelled @RequestMapping(value=“/call/{callId}", method = RequestMethod.GET) public List<Calls> getAgentCallById( @PathVariable(“callId") int callId, @RequestParam(value = “status", required = true) String callStatus) { }


Si 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 sería:

@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 de la URL e introducir conflictos de asignación de solicitud. Por ejemplo, ¿el /user/invoices proporcionaría las facturas para el usuario null o detalles sobre un usuario con ID "facturas"?