How do I retrieve query parameters in a Spring Boot controller? How do I retrieve query parameters in a Spring Boot controller? java java

How do I retrieve query parameters in a Spring Boot controller?


Use @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;}


While the accepted answer by afraisse is absolutely correct in terms of using @RequestParam, I would further suggest to use an Optional<> as you cannot always ensure the right parameter is used. Also, if you need an Integer or Long just use that data type to avoid casting types later on in the DAO.

@RequestMapping(value="/data", method = RequestMethod.GET)public @ResponseBodyItem getItem(@RequestParam("itemid") Optional<Integer> itemid) {     if( itemid.isPresent()){         Item i = itemDao.findOne(itemid.get());                       return i;     } else ....}


To accept both @PathVariable and @RequestParam in the same /user endpoint:

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

Testing with curl:

  • curl 'http://localhost:8080/user/books'
  • curl 'http://localhost:8080/user?book=ofdreams&name=nietzsche'