4

触发默认控制器获取所有汽车的正常 uri 只是“/cars”

我希望能够使用 uri 搜索汽车,例如:“/cars?model=xyz”,它将返回匹配汽车的列表。所有请求参数都应该是可选的。

问题是,即使使用查询字符串,默认控制器也会触发,我总是得到“所有汽车:......”

有没有办法在没有单独的搜索 uri(如“/cars/search?..”)的情况下使用 Spring 来做到这一点?

代码:

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

2 回答 2

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要求都匹配),那么将调用该方法。

于 2013-03-14T16:46:54.360 回答
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);
            }
        }
    }
于 2013-03-14T16:56:26.307 回答