¿Cómo recupero los parámetros de consulta en Spring Boot?


122

Estoy desarrollando un proyecto usando Spring Boot. Tengo un controlador que acepta solicitudes GET .

Actualmente acepto solicitudes para los siguientes tipos de URL:

http: // localhost: 8888 / user / data / 002

pero quiero aceptar solicitudes usando parámetros de consulta :

http: // localhost: 8888 / user? data = 002

Aquí está el código de mi controlador:

@RequestMapping(value="/data/{itemid}", method = RequestMethod.GET)
public @ResponseBody
item getitem(@PathVariable("itemid") String itemid) {   
    item i = itemDao.findOne(itemid);              
    String itemname = i.getItemname();
    String price = i.getPrice();
    return i;
}

7
@RequestParam(buen punto de partida: la guía oficial )
kryger

Respuestas:


197

Utilice @RequestParam

@RequestMapping(value="user", method = RequestMethod.GET)
public @ResponseBody Item getItem(@RequestParam("data") String itemid){

    Item i = itemDao.findOne(itemid);              
    String itemName = i.getItemName();
    String price = i.getPrice();
    return i;
}

1
Entonces, ¿cuál es la URL de este método, puede decirme? ¿Qué debería tener que cambiar
Mehandi Hassan

Lo siento hermano, esta URL no funciona localhost: 8888 / user? data = 001 He ingresado esta URL
Mehandi Hassan

3
Elimina value = "/" de la anotación de mapeo de solicitud. Por cierto, este es un diseño realmente pobre. Si va a acceder a un elemento para un usuario, el resto sería usuario / elementos / {itemId} .
afraisse

18
El uso de @RequestParam como public @ResponseBody item getitem(@RequestParam("data") String itemid){requiere que el parámetro de consulta de datos esté siempre presente. En cambio, si lo usa de esta manera public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, hace que los datos sean opcionales
samsri

3
... ¡Debería haber publicado una respuesta en lugar de dejar un comentario debajo de la pregunta! : -o
kryger

9

Si bien la respuesta aceptada por afraisse es absolutamente correcta en términos de uso @RequestParam, sugeriría además que use un <> opcional, ya que no siempre puede asegurarse de que se use el parámetro correcto. Además, si necesita un Integer o Long, simplemente use ese tipo de datos para evitar tipos de conversión más adelante en el DAO.

@RequestMapping(value="/data", method = RequestMethod.GET)
public @ResponseBody
Item getItem(@RequestParam("itemid") Optional<Integer> itemid) { 
    if( itemid.isPresent()){
         Item i = itemDao.findOne(itemid.get());              
         return i;
     } else ....
}

¿De dónde obtuviste Opcional?
Joey Gough


2

En Spring boot: 2.1.6, puede usar como se muestra a continuación:

    @GetMapping("/orders")
    @ApiOperation(value = "retrieve orders", response = OrderResponse.class, responseContainer = "List")
    public List<OrderResponse> getOrders(
            @RequestParam(value = "creationDateTimeFrom", required = true) String creationDateTimeFrom,
            @RequestParam(value = "creationDateTimeTo", required = true) String creationDateTimeTo,
            @RequestParam(value = "location_id", required = true) String location_id) {

        // TODO...

        return response;

@ApiOperation es una anotación que proviene de Swagger api, se utiliza para documentar las apis.


required = truepor defecto
DV82XL

0

Esto también me interesó y encontré algunos ejemplos en el sitio Spring Boot.

   // get with query string parameters e.g. /system/resource?id="rtze1cd2"&person="sam smith" 
// so below the first query parameter id is the variable and name is the variable
// id is shown below as a RequestParam
    @GetMapping("/system/resource")
    // this is for swagger docs
    @ApiOperation(value = "Get the resource identified by id and person")
    ResponseEntity<?> getSomeResourceWithParameters(@RequestParam String id, @RequestParam("person") String name) {

        InterestingResource resource = getMyInterestingResourc(id, name);
        logger.info("Request to get an id of "+id+" with a name of person: "+name);

        return new ResponseEntity<Object>(resource, HttpStatus.OK);
    }

Ver aquí también

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.