NoSuchBeanException для сгенерированных классов MapStruct в Micronaut - PullRequest
0 голосов
/ 10 января 2019

При генерации реализаций mapper с 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-компонент, и если вы используете Java или Kotlin, убедитесь, что вы включили обработку аннотаций. Путь пройден: новый SomeController ([FooBarMapper mapper]) io.micronaut.context.exceptions.DependencyInjectionException: не удалось ввести значение для параметра [mapper] класса: com.example.SomeController

1 Ответ

0 голосов
/ 13 марта 2019

Я нашел Micronaut PR , который должен решить проблему с mapstruct, используя jsr330 компонентную модель. Они планируют включить исправление в 1.1.0.

ОБНОВЛЕНИЕ: проблема исправлена ​​в 1.1.0.RC1

...