如何在 SpringBoot 控制器中检索查询参数?

我正在开发一个项目使用春天启动。我有一个控制器,接受 走开的请求。

目前,我正在接受对以下类型 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;
}
392996 次浏览

使用 @ 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;
}

我对此也很感兴趣,并在 SpringBoot 站点上看到了一些示例。

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

这里也有

就使用 @RequestParam而言,通过评价得到的答案是绝对正确的,但我还是建议使用可选的 < > ,因为您不能总是确保使用了正确的参数。另外,如果需要 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 ....
}

在 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。

在同一 /user端点上同时接受 @PathVariable@RequestParam:

@GetMapping(path = {"/user", "/user/{data}"})
public void user(@PathVariable(required=false,name="data") String data,
@RequestParam(required=false) Map<String,String> qparams) {
qparams.forEach((a,b) -> {
System.out.println(String.format("%s -> %s",a,b));
}
  

if (data != null) {
System.out.println(data);
}
}

卷曲测试:

  • 卷发’http://localhost:8080/user/books’
  • 卷发’http://localhost:8080/user?book=ofdreams&name=nietzsche’

在同一端点接受路径变量和查询 Param:

@RequestMapping(value = "/hello/{name}", method = RequestMethod.POST)
public String sayHi(
@PathVariable("name") String name,
@RequestBody Topic topic,
//@RequestParam(required = false, name = "s") String s,
@RequestParam Map<String, String> req) {
        

return "Hi "+name +" Topic : "+ topic+" RequestParams : "+req;
}

网址看起来像: http://localhost:8080/hello/testuser?city=pune&pin=411058&state=maha