我记得我不止一次遇到这个问题了,按照要求定义了controller,始终就是404,上一次的原因我已经不大记得了,这次又遇到就好好查一查。
先搜索引擎一遍,发现大家都遇到过404的问题,各种原因都有,这里面当然有各种原因,最关键的是没有任何错误日志导致问题非常的难查。
一般情况,如果有内部错误或者有致命的异常都会导致404.但是我一个Controller非常的简单,没有任何逻辑,也没有任何错误日志,让人非常的迷茫。
@RestController @RequestMapping("/orange/") public class AbcApi {
@RequestMapping("/pub") public ApiStatus publishOrange (HttpServletRequest request) { } } 按照官方的说明,我们定义如上的一个controller,然而这么简单却还有错误? 原因是abc的这个类可能冲突了,已经在别处定义过了,所以初始化的时候,他找到的AbcApi的类,并不是controller类型的,导致这个controller被丢失掉了。 解决办法是,修改掉AbcApi的名称,这个真的是Spring boot的软肋。 关键代码是: RequestMappingHandlerAdapter 打出来的日志里,会记录所有的control,我没有发现我定义的controller,所以得看看是什么原因。 找到这个函数:
ControllerAdviceBean.findAnnotatedBeans 这个函数内会寻找所有的controller并且加入列表。
beanNamesForTypeIncludingAncestors() 这个函数内,会有类型的判断 ========end=