为了账号安全,请及时绑定邮箱和手机立即绑定

重载包含不同路径变量类型的 RestController 方法

重载包含不同路径变量类型的 RestController 方法

ABOUTYOU 2021-06-25 15:01:05
我有以下问题:我有一个 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)}
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

在 Spring MVC 中,基于 PathVariable 类型的重载将是不可能的,因为这两个 API 将被认为是相同的。在运行时,将为您提到的任何请求找到两个处理程序,因此会出现异常。

您可以改为删除 getById() 方法,第二个 API 也适用于单个 ID。唯一的区别是返回类型将是一个 List 并且可以在客户端轻松处理。


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信