http路径的处理程序方法不明确?
问题内容:
我有一个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
但显然它仍然如此。有人会对如何解决这个问题有任何建议吗?谢谢!
问题答案:
对于Spring来说,分发请求很重要的是URL的Path部分。
这两个请求映射都捕获放置在路径中的任何值,并且无法区分应调用哪种方法。在你的示例代码,请求www.example.com/rest/api/datasources/foo
可以被处理getLatestApiMetadata
,其中“富”是的datasourceName
,也通过处理getAllMetadata
,其中“富”是的apiVersion
。