迁移至Micronaut 4后所有Controller均返回NOT_FOUND
解决Micronaut 4迁移后Azure Function Controller端点404问题
可能的原因及解决方案
1. 确认Azure Function依赖是否正确引入
Micronaut 4对Azure Function的依赖体系有调整,需确保POM中引入适配的starter依赖,替换旧的Function相关依赖:
<dependency> <groupId>io.micronaut.azure</groupId> <artifactId>micronaut-azure-function-http</artifactId> <version>4.6.3</version> <!-- 与Micronaut版本匹配 --> </dependency>
同时移除Micronaut 3中使用的micronaut-function-azure等旧依赖。
2. 检查Controller包扫描配置
Micronaut 4默认可能不会自动扫描所有包,需在application.yml中显式指定扫描路径:
micronaut: package-scan: packages: com.your.package.controller, com.your.package.service
或者在Azure Function入口类(标注@HttpTrigger的类)上添加@MicronautAzureFunction注解,确保Micronaut能识别并扫描Bean。
3. 验证Serde配置完整性
虽然已引入micronaut-serde-jackson,需确保配置文件中开启Serde支持:
micronaut: serde: enabled: true
同时确认注解处理器路径配置正确,POM中注解处理器需包含:
<annotationProcessorPaths> <path> <groupId>io.micronaut.serde</groupId> <artifactId>micronaut-serde-processor</artifactId> <version>4.6.3</version> <scope>provided</scope> </path> <!-- 其他必要的注解处理器 --> </annotationProcessorPaths>
4. 调整测试类配置
Micronaut 4中@MicronautTest的默认行为有变化,需确保测试类:
- 正确注入
HttpClient并使用正确的请求路径 - 添加
@TestInstance(TestInstance.Lifecycle.PER_CLASS)避免重复启动上下文 - 若测试环境需要,指定
@MicronautTest(environments = "test")
示例测试类调整:
import io.micronaut.http.HttpRequest; import io.micronaut.http.client.HttpClient; import io.micronaut.http.client.annotation.Client; import io.micronaut.test.extensions.junit5.annotation.MicronautTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import static org.junit.jupiter.api.Assertions.assertEquals; @MicronautTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class MyControllerTest { @Client("/") HttpClient client; @Test void testEndpoint() { var response = client.toBlocking().retrieve(HttpRequest.GET("/your-endpoint")); assertEquals("expected-response", response); } }
5. 排查日志与Bean注册情况
- 调整日志级别,在
application.yml中添加:
logger: levels: io.micronaut: DEBUG com.your.package.controller: DEBUG
启动后查看控制台是否有Controller类的注册日志,若没有注册日志,说明Micronaut未扫描到该类,需重新检查包扫描配置。
内容的提问来源于stack exchange,提问作者Ino van den Berg
相关产品推荐
相关产品推荐

