问题代码展示:
@SpringBootApplication
@ComponentScan(nameGenerator = QueryAllCityAnnotationBeanNameGenerator.class)
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
@RestController
@RequestMapping("/getAllCity")
public class TitysAction {
@RequestMapping("/citys")
public List<City> citys(){
return "业务逻辑";
}
}
启动异常:
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'titysAction' method
org.example.action.TitysAction#citys()
to { [/getAllCity/citys]}: There is already 'org.example.action.TitysAction' bean method
org.example.action.TitysAction#citys() mapped.
原因:@SpringBootApplication
已经包含了@ComponentScan
,默认就会扫描当前包,及其子包下的组件。 上述代码又定义了一个 @ComponentScan
扫描了QueryAllCityAnnotationBeanNameGenerator
类所在的包。 这两次扫描,都加载了同一个Controller
,所以导致映射冲突。
代码修改如下:
@SpringBootApplication(nameGenerator = QueryAllCityAnnotationBeanNameGenerator.class)
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
@RestController
@RequestMapping("/getAllCity")
public class TitysAction {
@RequestMapping("/citys")
public List<City> citys(){
return "业务逻辑";
}
}