Wie rufe ich Abfrageparameter in Spring Boot ab?

121

Ich entwickle ein Projekt mit Spring Boot. Ich habe einen Controller, der GET- Anfragen akzeptiert .

Derzeit akzeptiere ich Anfragen an folgende URLs:

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

Ich möchte jedoch Anforderungen mithilfe von Abfrageparametern annehmen :

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

Hier ist der Code meines Controllers:

@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;
}
Mehandi Hassan
quelle
7
@RequestParam(guter Ausgangspunkt: der offizielle Führer )
Kryger

Antworten:

196

Verwenden Sie @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;
}
afraisse
quelle
1
Wie lautet dann die URL dieser Methode? Was soll ich ändern müssen
Mehandi Hassan
Entschuldigung, diese URL funktioniert nicht localhost: 8888 / user? data = 001 Ich habe diese URL
eingegeben
3
Entfernen Sie value = "/" aus der Annotation der Anforderungszuordnung. Übrigens ist das wirklich schlechtes Design. Wenn Sie auf ein Element für einen Benutzer zugreifen möchten, lautet der Rest Weg user / items / {itemId} .
Afraisse
17
Mit @RequestParam als public @ResponseBody item getitem(@RequestParam("data") String itemid){erfordert Datenabfrageparameter immer vorhanden sein. Wenn Sie es stattdessen auf diese Weise verwenden public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, werden Daten erstellt optional
Sampath Surineni,
3
... Ich hätte eine Antwort posten sollen, anstatt einen Kommentar unter der Frage zu hinterlassen! : -o
kryger
9

Während die von afraisse akzeptierte Antwort in Bezug auf die Verwendung absolut korrekt ist @RequestParam, würde ich weiterhin empfehlen, ein optionales <> zu verwenden, da Sie nicht immer sicherstellen können, dass der richtige Parameter verwendet wird. Wenn Sie eine Ganzzahl oder Long benötigen, verwenden Sie einfach diesen Datentyp, um spätere Casting-Typen im DAO zu vermeiden.

@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 ....
}
Andrew Grothe
quelle
Woher hast du Optional?
Joey Gough
1
@JoeyGough in Java 8 eingeführt docs.oracle.com/javase/8/docs/api/java/util/Optional.html
Andrew Grothe
2

In Spring Boot: 2.1.6 können Sie wie folgt verwenden:

    @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 ist eine Anmerkung, die von Swagger API stammt. Sie wird zur Dokumentation der API verwendet.

Shashank
quelle
required = trueStandardmäßig
DV82XL
0

Das hat mich auch interessiert und ich habe einige Beispiele auf der Spring Boot-Website gefunden.

   // 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);
    }

Siehe auch hier

TKPhillyBurb
quelle