我有以下问题:
我有一个Rest控制器,我想在以下URL中进行配置:
/ api / districts / 1,2,3-(按ID数组列出地区)
/ api / districts / 1-(按单个ID列出地区)
这些是以下映射方法:
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public District getById(@PathVariable int id) {
// check input
return districtService.getById(id);
}
@RequestMapping(value = "/{districtIDs}", method = RequestMethod.GET)
public List<District> listByArray(@PathVariable Integer[] districtIDs) {
ArrayList<District> result = new ArrayList<>();
for (Integer id : districtIDs) {
result.add(districtService.getById(id));
}
return result;
}
这是我向/ api / districts / 1,2,3请求时遇到的错误
There was an unexpected error (type=Internal Server Error, status=500).Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/api/districts/1,2,3': {public java.util.List com.groto.server.web.DistrictsController.listByArray(java.lang.Integer[]), public com.groto.server.models.hibernate.District com.groto.server.web.DistrictsController.getById(int)}
这是我向/ api / districts / 1请求时遇到的错误
There was an unexpected error (type=Internal Server Error, status=500).Ambiguous handler methods mapped for HTTP path 'http://localhost:8080/api/districts/1': {public java.util.List com.groto.server.web.DistrictsController.listByArray(java.lang.Integer[]), public com.groto.server.models.hibernate.District com.groto.server.web.DistrictsController.getById(int)}
最佳答案
在Spring MVC中,将无法基于PathVariable类型进行重载,因为这两个API都将被视为相同。在运行时,将为您提到的任何请求找到两个处理程序,因此会发现异常。
您可以改为删除getById()方法,并且第二个API也将适用于单个ID。唯一的区别是返回类型将是一个列表,并且可以在客户端轻松处理。