Bagaimana cara mengambil parameter kueri di Spring Boot?


122

Saya sedang mengembangkan proyek menggunakan Spring Boot. Saya memiliki pengontrol yang menerima permintaan GET .

Saat ini saya menerima permintaan untuk jenis URL berikut:

http: // localhost: 8888 / pengguna / data / 002

tetapi saya ingin menerima permintaan menggunakan parameter kueri :

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

Berikut kode pengontrol saya:

@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(titik awal yang baik: panduan resmi )
kryger

Jawaban:


197

Gunakan @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
lalu apa URL dari metode ini yang dapat Anda ceritakan? Apa yang harus saya ubah
Mehandi Hassan

maaf bro, URL ini tidak berfungsi localhost: 8888 / user? data = 001 Saya telah memasukkan URL ini
Mehandi Hassan

3
Hapus nilai = "/" dari anotasi pemetaan permintaan. Btw ini desain yang sangat buruk. Jika Anda akan mengakses item untuk pengguna maka cara lainnya adalah pengguna / item / {itemId} .
afraisse

18
Menggunakan @RequestParam karena public @ResponseBody item getitem(@RequestParam("data") String itemid){mengharuskan parameter kueri data selalu ada. Sebaliknya jika Anda menggunakannya dengan cara ini public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, itu membuat data menjadi opsional
samsri

3
... Saya seharusnya memberikan jawaban daripada memberikan komentar di bawah pertanyaan! : -o
kryger

9

Sementara jawaban yang diterima oleh afraisse benar-benar benar dalam hal penggunaan @RequestParam, saya lebih lanjut menyarankan untuk menggunakan Opsional <> karena Anda tidak selalu dapat memastikan parameter yang tepat digunakan. Selain itu, jika Anda membutuhkan Integer atau Long cukup gunakan tipe data tersebut untuk menghindari tipe casting nanti di 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 ....
}

dari mana Anda mendapatkan Opsional?
Joey Gough


2

Di Spring boot: 2.1.6, Anda dapat menggunakan seperti di bawah ini:

    @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 adalah anotasi yang berasal dari Swagger api, digunakan untuk mendokumentasikan apis.


required = truesecara default
DV82XL

0

Saya juga tertarik dengan ini dan menemukan beberapa contoh di situs 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);
    }

Lihat di sini juga

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.