触发默认控制器以获取所有汽车的正常uri只是“/ cars”
我希望能够搜索汽车以及uri,例如:“/ cars?model = xyz”,它将返回匹配汽车列表。所有请求参数都应该是可选的。
问题在于即使使用查询字符串,默认控制器也会触发,我总是得到“所有汽车:......”
有没有办法在没有单独搜索uri的情况下使用Spring执行此操作(例如“/ cars / search?..”)?
代码:
@Controller
@RequestMapping("/cars")
public class CarController {
@Autowired
private CarDao carDao;
@RequestMapping(method = RequestMethod.GET, value = "?")
public final @ResponseBody String find(
@RequestParam(value = "reg", required = false) String reg,
@RequestParam(value = "model", required = false) String model
)
{
Car searchForCar = new Car();
searchForCar.setModel(model);
searchForCar.setReg(reg);
return "found: " + carDao.findCar(searchForCar).toString();
}
@RequestMapping(method = RequestMethod.GET)
public final @ResponseBody String getAll() {
return "all cars: " + carDao.getAllCars().toString();
}
}
答案 0 :(得分:11)
您可以使用
@RequestMapping(method = RequestMethod.GET, params = {/* string array of params required */})
public final @ResponseBody String find(@RequestParam(value = "reg") String reg, @RequestParam(value = "model") String model)
// logic
}
即,@RequestMapping
注释具有名为params
的属性。如果您指定的所有参数都包含在您的请求中(并且所有其他RequestMapping
要求都匹配),那么将调用该方法。
答案 1 :(得分:1)
尝试以下方法的变体:
@Controller
@RequestMapping("/cars")
public clas CarController
{
@RequestMapping(method = RequestMethod.get)
public final @ResponseBody String carsHandler(
final WebRequest webRequest)
{
String parameter = webRequest.getParameter("blammy");
if (parameter == null)
{
return getAll();
}
else
{
return findCar(webRequest);
}
}
}