Spring Boot'ta sorgu parametrelerini nasıl alırım?


123

Spring Boot kullanarak bir proje geliştiriyorum. GET isteklerini kabul eden bir denetleyicim var .

Şu anda aşağıdaki türden URL'lere yönelik istekleri kabul ediyorum:

http: // localhost: 8888 / user / veri / 002

ancak sorgu parametrelerini kullanan istekleri kabul etmek istiyorum :

http: // localhost: 8888 / kullanıcı verileri = 002

İşte denetleyicimin kodu:

@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(iyi bir başlangıç ​​noktası: resmi rehber )
kryger

Yanıtlar:


199

@RequestParam kullanın

@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
o zaman bu yöntemin URL'si nedir lütfen söyler misiniz? Neyi değiştirmeliyim
Mehandi Hassan

üzgünüm, bu URL çalışmıyor localhost: 8888 / user? data = 001 Bu URL'yi girdim
Mehandi Hassan

3
İstek eşleme ek açıklamasından değer = "/" öğesini kaldırın . Btw bu gerçekten kötü bir tasarım. Bir kullanıcı için bir öğeye erişecekseniz, geri kalan yol user / items / {itemId} olacaktır .
afraisse

18
Kullanma @RequestParam olarak public @ResponseBody item getitem(@RequestParam("data") String itemid){gerektirir verilerin sorgu parametresi her zaman mevcut olması. Eğer bu şekilde kullanmak yerine eğer public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, o yapar verileri isteğe bağlı olarak
samsri

3
... Sorunun altına yorum bırakmak yerine bir yanıt göndermeliydim! : -o
kryger

9

Afraisse tarafından kabul edilen cevap kullanım açısından kesinlikle doğru @RequestParamolsa da, her zaman doğru parametrenin kullanıldığından emin olamayacağınız için bir İsteğe Bağlı <> kullanmanızı öneririm. Ayrıca, bir Tamsayı veya Uzun'a ihtiyacınız varsa, daha sonra DAO'da türlerin dönüştürülmesini önlemek için bu veri türünü kullanın.

@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 ....
}

Opsiyonel nereden aldın?
Joey Gough


2

Spring boot: 2.1.6'da aşağıdaki gibi kullanabilirsiniz:

    @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, Swagger api'den gelen bir ek açıklamadır, apileri belgelemek için kullanılır.


required = truevarsayılan olarak
DV82XL

0

Bununla da ilgilenmiştim ve Spring Boot sitesinde bazı örneklerle karşılaştım.

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

Ayrıca buraya bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.