Comment récupérer les paramètres de requête dans Spring Boot?


122

Je développe un projet avec Spring Boot. J'ai un contrôleur qui accepte les requêtes GET .

Actuellement, j'accepte les demandes adressées aux types d'URL suivants:

http: // localhost: 8888 / utilisateur / data / 002

mais je souhaite accepter les demandes utilisant des paramètres de requête :

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

Voici le code de mon contrôleur:

@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(bon point de départ: le guide officiel )
kryger

Réponses:


197

Utilisez @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
alors quelle est l'URL de cette méthode pouvez-vous s'il vous plaît dire? Que dois-je changer
Mehandi Hassan

Désolé, cette URL ne fonctionne pas localhost: 8888 / user? data = 001 J'ai saisi cette URL
Mehandi Hassan

3
Supprimez value = "/" de l'annotation de mappage de demande. Btw c'est vraiment une mauvaise conception. Si vous allez accéder à un élément pour un utilisateur, le reste serait user / items / {itemId} .
afraisse

18
L'utilisation de @RequestParam as public @ResponseBody item getitem(@RequestParam("data") String itemid){nécessite que le paramètre de requête de données soit toujours présent. Au lieu de cela, si vous l'utilisez de cette façon public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, cela rend les données facultatives
samsri

3
... J'aurais dû poster une réponse au lieu de laisser un commentaire sous la question! : -o
kryger

9

Bien que la réponse acceptée par afraisse soit absolument correcte en termes d'utilisation @RequestParam, je suggérerais en outre d'utiliser un option <> car vous ne pouvez pas toujours vous assurer que le bon paramètre est utilisé. De plus, si vous avez besoin d'un Integer ou d'un Long, utilisez simplement ce type de données pour éviter de transtyper les types ultérieurement dans le 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 ....
}

d'où avez-vous obtenu facultatif?
Joey Gough le


2

Dans Spring boot: 2.1.6, vous pouvez utiliser comme ci-dessous:

    @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 est une annotation qui vient de Swagger api, elle est utilisée pour documenter les apis.


required = truepar défaut
DV82XL

0

Cela m'intéressait également et je suis tombé sur quelques exemples sur le site 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);
    }

Voir aussi ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.