Spring Boot Webflux测试时endpoint未找到返回404,是什么原因导致的?
问题修复方案
测试类缺少启动注解
你当前的测试类仅配置了@AutoConfigureWebTestClient,缺少@SpringBootTest注解,会导致Spring上下文无法正常启动,你定义的RouterFunction、Controller等Bean都不会被注册到容器中,自然无法匹配请求路径返回404。
修复方式:给测试类添加@SpringBootTest注解即可。
路由匹配规则与测试请求不匹配
Router配置中你使用了RequestPredicates.accept(MediaType.APPLICATION_JSON)规则,要求请求的Accept头必须为application/json才会命中该路由,但你的测试代码仅设置了contentType(对应Content-Type头,标识请求体类型),未配置Accept头,会导致路由匹配失败返回404。
修复方式:测试代码中补充Accept头配置,在.uri("/agency")后添加.accept(MediaType.APPLICATION_JSON)即可。
包扫描范围异常排查
确认AgencyRouter、AgencyController所在的包是否为启动类的同级包或子包,Spring Boot默认仅扫描启动类所在包及其子包下的注解,如果路由类不在扫描范围内,也会导致路由未注册。
注解说明
@Bean:标注在@Configuration类的方法上,作用是将方法返回的对象注册为Spring容器的托管Bean,你当前Router类中@Bean的用法是正确的,会把定义的路由规则注册到WebFlux上下文。@Autowired:作用是让Spring自动从容器中匹配对应类型的托管Bean,注入到标注的属性、方法参数中,你测试类中注入WebTestClient的用法是正确的,只要Spring上下文正常启动即可注入成功。
内容的提问来源于stack exchange,提问作者Aluxxen
相关产品推荐
相关产品推荐

