【问题标题】:NoSuchBeanException for MapStruct generated classes in MicronautMicronaut 中 MapStruct 生成的类的 NoSuchBeanException
【发布时间】:2019-01-10 20:57:45
【问题描述】:

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

【问题讨论】:

  • 映射器生成了吗?
  • 是的,映射器已经生成,我也可以在控制器中手动实例化一个。只是使用@Inject 的接线不起作用。
  • 这条消息是什么时候从 Micronaut 发出的?在编译或运行时?也许 micronaut 没有等待其他注释处理器
  • 在运行时,如果我在pom中改变注解处理器的顺序,使mapstruct在micronaut之后,则不会生成mapstruct代码。
  • 这是一个已知问题,请参阅github.com/micronaut-projects/micronaut-core/issues/991

标签: java mapstruct micronaut


【解决方案1】:

我发现Micronaut PR 应该可以解决使用jsr330 组件模型的mapstruct 问题。他们计划在1.1.0 中包含修复程序。

更新:如果在1.1.0.RC1 中修复了该问题

【讨论】:

  • 感谢您的努力 - 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 2016-12-11
  • 2019-12-03
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多