4

すべての車を取得するためにデフォルトのコントローラーをトリガーする通常の uri は、単に "/cars" です。

たとえば、一致する車のリストを返す "/cars?model=xyz" などの uri を使用して、車も検索できるようにしたいと考えています。すべてのリクエスト パラメータはオプションである必要があります。

問題は、クエリ文字列を使用しても、デフォルトのコントローラーがトリガーされ、常に「すべての車: ...」が表示されることです。

別の検索 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 に答える