use*_*869 3 java rest spring spring-mvc
我有一个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
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试到达其中一个其他端点时,我收到一个错误说:java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path它指出了这两个方法作为问题.我的印象是,如果我更改请求参数,Spring不会通过这篇文章抱怨它们是相同的:http://www.coderanch.com/t/598675/Spring/handling-HTTP-Request-parameters但是显然它仍然存在.有人会对如何解决这个问题有任何建议吗?谢谢!
Tim*_*der 13
Spring分派请求的重要因素是URL的Path部分.
两个请求映射都捕获路径中的任何值,并且无法区分应该调用哪个方法.在你的示例代码,请求www.example.com/rest/api/datasources/foo可以被处理getLatestApiMetadata,其中"富"是的datasourceName,也通过处理getAllMetadata,其中"富"是的apiVersion.
| 归档时间: |
|
| 查看次数: |
15163 次 |
| 最近记录: |