spring boot 开发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...
}