猿问

Micronaut 中 MapStruct 生成的类的 NoSuchBeanException

当使用 MapStruct 生成映射器实现时,使用“jsr330”componentModel,micronaut 将在运行时尝试注入它们时抛出 NoSuchBeanException。


一种解决方法是使用提供映射器对象的提供程序,但生成的代码应该可以工作。


映射器定义:


@Mapper(componentModel = "jsr330")

public interface FooBarMapper {

    Foo toFoo(Bar bar);

}

控制器:


@Controller

public class SomeController {

    @Inject

    public SomeController(FooBarMapper mapper) {

    }


    @Get

    public String foo() {

        return "foo";

    }

}

pom.xml 摘录:


<annotationProcessorPaths>

    <path>

        <groupId>org.mapstruct</groupId>

        <artifactId>mapstruct-processor</artifactId>

        <version>${mapstruct.version}</version>

    </path>

    <path>

        <groupId>io.micronaut</groupId>

        <artifactId>micronaut-inject-java</artifactId>

        <version>${micronaut.version}</version>

    </path>

    <path>

        <groupId>io.micronaut.configuration</groupId>

        <artifactId>micronaut-openapi</artifactId>

        <version>${micronaut.version}</version>

    </path>

</annotationProcessorPaths>

在控制器上调用该方法时,我希望 Micronaut 找到 Mapstruct 生成的类(它用 @Singleton 注释),但结果却是


消息:不存在 [com.example.FooBarMapper] 类型的 bean。确保该类被声明为 bean,如果您使用的是 Java 或 Kotlin,请确保您已启用注释处理。采用的路径:new SomeController([FooBarMapper mapper]) io.micronaut.context.exceptions.DependencyInjectionException:无法为类的参数 [mapper] 注入值:com.example.SomeController


萧十郎
浏览 227回答 1
1回答

收到一只叮咚

我发现Micronaut PRjsr330应该使用组件模型解决 mapstruct 的问题。他们计划将修复程序包含在1.1.0.更新:如果解决了这个问题1.1.0.RC1
随时随地看视频慕课网APP

相关分类

Java
我要回答