Как получить параметры запроса в Spring Boot?
Я занимаюсь разработкой проекта с использованием Spring Boot. У меня есть контроллер, который принимает запросы GET.
В настоящее время я принимаю запросы на следующие виды URL:
HTTP://локальный: 8888/пользователь/данные /002
но я хочу принимать запросы, используя параметры запроса:
HTTP://локальный: 8888/пользовательские данные = 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;
}
Ответы
Ответ 1
Используйте @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;
}
Ответ 2
Я тоже заинтересовался этим и натолкнулся на несколько примеров на сайте 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);
}
Смотрите здесь также
Ответ 3
Хотя принятый ответ afraisse является абсолютно правильным с точки зрения использования @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 ....
}