问题现象:

今天在项目中遇到一个问题,报错如下:

java.lang.IllegalStateException: Ambiguous mapping. Cannot map ''xxxController'' method com...xxxController#xxxxxxxxx(xxx)(已解决)IllegalStateException报错: Ambiguous mapping. Cannot map ‘‘xxx‘‘method


问题分析:

根据报错信息可以得知:这是因为这个xxxController类中的allToReaded(String)方法不能被映射;

通过查看该方法我们可以发现:

(已解决)IllegalStateException报错: Ambiguous mapping. Cannot map ‘‘xxx‘‘method

,这是一个接口方法,所以这里的报错就是这个方法名和接口名的映射关系不成立:

通过观察接口名和方法名,就能很快的知道问题所在了;因为我喜欢把方法名和接口名进行同名操作,而这里不同名,也就是说这个接口名应该对应到另一个方法名,通过检索可以快速定位到和这个接口名同名的方法名:(已解决)IllegalStateException报错: Ambiguous mapping. Cannot map ‘‘xxx‘‘method

可以看到:这里我们用了两个不同名的方法去映射了同一个接口名,所以导致了报错

注意:这里还要注意一点:并不是说同一个接口名就不能映射到多个方法名(无论这些方法名是否相同);

出错的关键是因为:在同一个上下文路径中(可以理解为同一个Controller类中)不能存在多个相同的接口名;

也就是说假如这两个方法不在同一个上下文路径中(Controller类中),就可以映射同一个接口名;

其实这个规则同样适用于方法名,同一个类中不能存在带有相同参数列表的相同方法名(同名不同参则为重载,java允许重载)

而如果这两个带有相同参数列表的同名方法,是定义在不同的类中的话,则是没有问题的.


解决方法:

修改报错的信息中提到的方法名所映射的接口名为:allToReaded,如下:

(已解决)IllegalStateException报错: Ambiguous mapping. Cannot map ‘‘xxx‘‘method

相关文章: