You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:45:10