Come si recuperano i parametri di query in Spring Boot?


122

Sto sviluppando un progetto utilizzando Spring Boot. Ho un controller che accetta le richieste GET .

Al momento accetto richieste ai seguenti tipi di URL:

http: // localhost: 8888 / utente / dati / 002

ma voglio accettare le richieste utilizzando i parametri di query :

http: // localhost: 8888 / dati utente = 002

Ecco il codice del mio controller:

@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(buon punto di partenza: la guida ufficiale )
kryger

Risposte:


197

Usa @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
allora qual è l'URL di questo metodo puoi dirlo per favore? Cosa dovrei cambiare
Mehandi Hassan

scusa fratello questo URL non funziona localhost: 8888 / user? data = 001 Ho inserito questo URL
Mehandi Hassan

3
Rimuovi value = "/" dall'annotazione di mappatura della richiesta. A proposito, questo è un design davvero scadente. Se hai intenzione di accedere a un elemento per un utente, il resto sarebbe user / items / {itemId} .
afraisse

18
L'utilizzo di @RequestParam as public @ResponseBody item getitem(@RequestParam("data") String itemid){richiede che il parametro di query dei dati sia sempre presente. Invece, se lo usi in questo modo public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, rende i dati facoltativi
samsri

3
... avrei dovuto postare una risposta invece di lasciare un commento sotto la domanda! : -o
kryger

9

Sebbene la risposta accettata da afraisse sia assolutamente corretta in termini di utilizzo @RequestParam, suggerirei inoltre di utilizzare un Opzionale <> poiché non è sempre possibile garantire che venga utilizzato il parametro giusto. Inoltre, se hai bisogno di un numero intero o lungo, usa quel tipo di dati per evitare di eseguire il cast di tipi in seguito nel 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 ....
}

da dove hai preso gli optional?
Joey Gough


2

In Spring boot: 2.1.6, puoi usare come di seguito:

    @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 è un'annotazione che proviene dall'api Swagger, viene utilizzata per documentare le API.


required = trueper impostazione predefinita
DV82XL

0

Anche a me interessava questo e mi sono imbattuto in alcuni esempi sul sito 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);
    }

Vedi anche qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.