鍍金池/ 問答/Java  HTML/ 類似@GetMapping("/getAll/{arg}")

類似@GetMapping("/getAll/{arg}")請求路徑,arg不穿值如何做

spring boot 開發(fā)restful API時,使用@GetMapping("/getAll/{arg}")方式寫請求路徑,然后使用@PathVariable 獲取arg的值,但如果這個arg不傳則報錯404提示路勁找不到。想法是這個arg參數是可選的,不傳入則是無條件查詢,有則是條件查詢。代碼如下:

@GetMapping("/getAll/{companyName}")
    public ReturnModel getAllBusByCompany(@PathVariable(value="companyName",required=false)String companyName) {
        List<Bus> bus;
        if(""==companyName || null == companyName) {
            bus = automobileRepository.findAll();
        }else {
            bus = automobileRepository.findAllByComName(companyName);
        }
        return Result.success(bus);
    }

問題:使用@PathVariable如何傳入可空的路徑,并正確mapping到?望網友們不吝賜教(●'?'●)

回答
編輯回答
傲嬌范

你現在的接口匹配的路徑是:/getAll/{companyName}。
如果不傳companyName,那么就會去匹配/getAll,就會報404了。

所以要么分別寫成/getAll/getAll/{companyName}兩個接口:

@GetMapping("/getAll")
public ReturnModel getAllBus() {
    //findAll...
}

@GetMapping("/getAll/{companyName}")
public ReturnModel getAllBusByCompany(@PathVariable("companyName") String companyName) {
    //findAllByComName...
}

或者寫成/getAllBusByCompany?companyName=xxx的形式去調用:

@GetMapping("/getAllBusByCompany")
public ReturnModel getAllBusByCompany(String companyName) {
    //findAll or findAllByComName...
}
2018年6月19日 14:42