如何在Spring Boot中检索查询参数?


121

我正在使用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

Answers:


196

使用@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
那请问这个方法的网址是什么?我应该更改什么
Mehandi Hassan

抱歉,此URL无法正常工作localhost:8888 / user?data = 001我已经输入了此URL
Mehandi Hassan 2015年

3
从请求映射注释中删除value =“ /”。顺便说一句,这确实是糟糕的设计。如果您要为用户访问某项,则其余的方式为user / items / {itemId}
afraisse

17
使用@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由于您不能始终确保使用正确的参数,因此我进一步建议使用Optional <>。另外,如果您需要Integer或Long,则只需使用该数据类型来避免稍后在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
Andrew Grothe

2

在Spring Boot: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是来自Swagger api的注释,用于记录api。


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

也见这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.