X

Spring boot的controller无法生效404的原因

我记得我不止一次遇到这个问题了,按照要求定义了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=
Categories: 其他
龙安_任天兵: 不忘初心,方得始终!