generatorul openapi typescript-angular adaugă numere la sfârșitul numelor metodelor


Descriere Am un fișier expus de la serverul Spring Boot și folosesc acest script pentru a genera un client Angular în TypeScript

openapi-generator-cli generate -g typescript-angular -i ./src/app/data/open-api.json -o ./src/app/data/build/openapi

există nume de API duplicate în sistem

structură simplă

Controller1 : [obține, listă, șterge,... ....] Controller2 : [obține, listă, șterge,... ....] .....

clasele generate arată astfel

Controller1Service{
public get1 ....
public list1 .....
}
Controller2Service{
public get2 ....
public list2 .....
}

dar funcțiile sunt unice în același controler și generatorul tot adaugă numere la ele

openapi-generator versiunea 4.3.1 folosind npm cli

Conținutul fișierului sau URL-ul declarației OpenAPI Linia de comandă folosită pentru generare openapi-generator-cli generate -g typescript-angular -i ./src/app/data/open-api.json -o ./src/app/data/build/openapi


Deci există vreo modalitate de a face aceste numere să dispară?

când se actualizează backend-ul, numerele se pot schimba intern și acest lucru va duce la o refactorizare manuală a codului

Răspuns #1

Din șablon, numerele provin din atributul „nickname”.

În interiorul OpenAPI, acesta este generat din operationId atunci când se generează fișierul open-api.json.

Soluția pentru Spring Boot (și altele asemănătoare, pentru a se adapta...) este să ajustați generarea operationId (răspunsul original).

Pentru ca codul generat să corespundă în continuare unei interfețe comune (așa cum se întâmplă atunci când se folosesc controllere Spring generice), operationId trebuie să corespundă unei referințe (implicit: numele metodei de manipulare). Iată ce am folosit (ChangeController.class fiind generic și alcătuind aproximativ 80% din API).

@Bean
public OperationCustomizer operationIdCustomizer() {
    return (operation, handlerMethod) -> {
        Class<?> superClazz = handlerMethod.getBeanType().getSuperclass();
        if (Objects.nonNull(superClazz) && superClazz.isAssignableFrom(ChangeController.class)) {
            operation.setOperationId(String.format("%s", handlerMethod.getMethod().getName()));
        }
        return operation;
    };
}

NOTĂ IMPORTANTĂ: acest lucru va genera eroare la validarea specificației când se generează clientul Angular, dezactivați validarea explicit (skipValidateSpec).

De asemenea, pentru generarea lucrului cu Angular 10+, este necesar openapi-generator 5.0.0 (pentru ModuleWithProviders generic).

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>5.0.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/../sic-frontend/src/app/api/openapi.json</inputSpec>
                <generatorName>typescript-angular</generatorName>
                <output>${project.basedir}/../sic-frontend/src/app/api</output>
                <skipValidateSpec>true</skipValidateSpec>
                <configOptions>
                    <ngVersion>10.0.0</ngVersion>
                </configOptions>

            </configuration>
        </execution>
    </executions>
</plugin>