Can Spring MVC's REST framework accept query strings rather than PathVariables?

Ken Bellows picture Ken Bellows · Sep 10, 2012 · Viewed 33.4k times · Source

In all the tutorials and articles I have read regarding Spring 3's RESTful additions to Spring MVC, I have only ever seen one way for the use to pass in query data, via a @PathVariable, like so:

@RequestMapping(value="/shops/{name}", method=RequestMethod.GET)
public @ResponseBody Shop getShopInJSON(@PathVariable String name) {
    ...
}

which would respond to something like http://www.example.com/myservlet/shops/{name}, which could evaluate to http://www.example.com/myservlet/shops/thebestshoparound.

My question is this: Is it possible to set up a RESTful interface that takes requests based on classic query strings, e.g. http://www.example.com/myservlet/shops?name=thebestshoparound, instead of PathVariables?

This seems like a really simple question, but I can't find it anywhere online.

Answer

nickdos picture nickdos · Sep 11, 2012

Yes, use the annotation @RequestParam, here is an example:

public @ResponseBody Shop getShopInJSON(@PathVariable String name, @RequestParam(value="query", required=false) String query) {
    // do stuff
}