【发布时间】:2015-12-26 13:53:44
【问题描述】:
我有一个 Spring 应用程序,我在其中声明了我的类:
@Controller
@RequestMapping(value = "/rest/api/datasources/", produces = MediaType.APPLICATION_JSON_VALUE, method=RequestMethod.GET)
public class MetadataServiceController {
//Two separate methods:
@RequestMapping(value="{datasourceName}")
public Object getLatestApiMetadata(@PathVariable String datasource,
@RequestParam (required = false) String datasourceNum,
@RequestParam (defaultValue = "true") String dataFields,
@RequestParam ( required=false, defaultValue = "api") String visibility){
... //Implementation here
}
@RequestMapping(value="{apiVersion}")
public @ResponseBody List<DataSource> getAllMetadata(
@RequestHeader(value="sub-version", required=false, defaultValue="0.0") String minorVer,
@PathVariable String restApiVersion,
@RequestParam(required = false) String datasourceNum,
@RequestParam(defaultValue = "all") String visibility)
throws ObjectNotFoundException {
... //Implementation here
}
}
但是当我尝试到达这些休息端点之一时,我收到一条错误消息:java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 并将这两种方法指定为问题。我的印象是,如果我更改请求参数,Spring 不会通过这篇文章抱怨它们是相同的:http://www.coderanch.com/t/598675/Spring/handling-HTTP-Request-parameters,但显然它仍然存在。有人对如何解决这个问题有任何建议吗?谢谢!
【问题讨论】:
-
如果我向
http://your.server/rest/api/datasources/foo发送请求,应该调用哪个方法?http://your.server/rest/api/datasources/bar怎么样? -
@BoristheSpider 啊是的,但我不是为路径指定了一组不同的请求参数吗?
-
不,你绝对没有——看我的回答。
-
您没有指定任何不同的内容。如果要根据请求参数进行路由,则将
params属性添加到RequestMapping注释中,目前从映射的角度来看没有什么不同。 -
@BoristheSpider 当时很困惑,因为我认为
@RequestParam会为我做这件事。我看了stackoverflow.com/questions/13715811/…,似乎是说@RequestParam注解确实是用于基于参数的路由。
标签: java spring rest spring-mvc