Spring can’t distinguish if the request GET http://localhost:8080/api/brand/1
will be handled by getBrand(Integer)
or by getBrand(String)
because your mapping is ambiguous.
Try using a query parameter for the getBrand(String)
method. It seems more appropriate, since you are performing a query:
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Brand getBrand(@PathVariable Integer id) {
return brandService.getOne(id);
}
@RequestMapping(method = RequestMethod.GET)
public List<Brand> getBrands(@RequestParam(value="name") String name) {
return brandService.getSome(name);
}
Using the approach described above:
- Requests like
GET http://localhost:8080/api/brand/1
will be handled bygetBrand(Integer)
. - Requests like
GET http://localhost:8080/api/brand?name=nike
will be handled bygetBrand(String)
.
Just a hint: As a common practice, prefer plural nouns for collections of resources. So instead of /brand
, use /brands
.