Як отримати параметри запиту у Spring Boot?


122

Я розробляю проект за допомогою Spring Boot. У мене є контролер, який приймає GET- запити.

На даний момент я приймаю запити на такі URL-адреси:

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

але я хочу приймати запити, використовуючи параметри запиту :

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

Ось код мого контролера:

@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(хороший вихідний пункт: офіційний довідник )
kryger

Відповіді:


197

Використовуйте @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
то яка URL-адреса цього методу ви можете сказати, будь ласка? Що я повинен змінити
Механді Хассан

Вибачте, брато, ця URL не працює localhost: 8888 / користувач? data = 001 Я ввійшов у цю URL
Механді Хассан

3
Видаліть значення = "/" з анотації про відображення запиту. До речі, це дійсно поганий дизайн. Якщо ви збираєтеся отримати доступ до елемента для користувача, тоді іншим способом буде користувач / items / {itemId} .
afraisse

18
Використання @RequestParam як public @ResponseBody item getitem(@RequestParam("data") String itemid){вимагає, щоб параметр запиту даних завжди був присутній. Замість цього, якщо ви використовуєте його таким чином public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, вони роблять дані необов’язковими
samsri

3
... Я повинен був розмістити відповідь, а не залишати коментар під питанням! : -o
kryger

9

Хоча прийнята відповідь afraisse абсолютно правильна з точки зору використання @RequestParam, я б запропонував використовувати Необов’язково <>, оскільки ви не завжди можете забезпечити правильний параметр. Крім того, якщо вам потрібен цілий чи довгий, просто використовуйте цей тип даних, щоб уникнути тих, хто пізніше вводить типи в 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 ....
}

звідки ви взяли необов’язково?
Joey Gough

1
@JoeyGough представлений на Java 8. docs.oracle.com/javase/8/docs/api/java/util/Otional.html
Ендрю Гроте

2

У весняному завантаженні: 2.1.6, ви можете використовувати як нижче:

    @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 - це примітка, що надходить із api Swagger, використовується для документування apis.


required = trueза замовчуванням
DV82XL

0

Я також зацікавився цим і натрапив на кілька прикладів на сайті 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);
    }

Дивіться також тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.