在Micronaut中为MapStruct生成的类的NoSuchBeanException

问题描述 投票:2回答:1

当使用MapStruct生成mapper-implementation时,使用“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,请确保已启用注释处理。路径:新的SomeController([FooBarMapper mapper])io.micronaut.context.exceptions.DependencyInjectionException:无法为类的参数[mapper]注入值:com.example.SomeController

java mapstruct micronaut
1个回答
1
投票

我发现Micronaut PR应该使用jsr330组件模型解决maptruct的问题。他们计划在1.1.0中加入修复程序。

更新:问题,如果在1.1.0.RC1修复

© www.soinside.com 2019 - 2024. All rights reserved.