I have two projects known as (Common
and ApiGateway
).The common is a Gradle java project and ApiGateway is a Micronaut java application. In the common project, I am keeping all the common things and referencing the jar to the Apigateway project.
Common project
The below code is compiled with ./gradlew build
@Validated public interface IProductOperation { @Get(value = "/search/{text}") @Secured(SecurityRule.IS_ANONYMOUS) Flux<?> freeTextSearch(@NotBlank String text); @Get(value = "/{?searchCriteria*}") @Secured(SecurityRule.IS_ANONYMOUS) Mono<?> find(FilterProductModel searchCriteria); }
The API gateway implements the IProductOperation
interface which is in the common project. When I navigate to the code base, I can see the below code is generated
@Validated public interface IProductOperation { @Get("/search/{text}") @Secured({"isAnonymous()"}) Flux<?> freeTextSearch(@NotBlank String var1); @Get("/{?searchCriteria*}") @Secured({"isAnonymous()"}) Mono<?> find(FilterProductModel var1); }
Now when I compile the second application the Apigateway project, I get an exception as The route declares a uri variable named [text], but no corresponding method argument is present
which is valid because the parameter in freeTextSearch()
and find()
methods got changed to var1
.
I have below dependency in the common project
dependencies { annotationProcessor "io.micronaut:micronaut-inject-java:3.5.0" annotationProcessor "io.micronaut:micronaut-validation:3.5.0" implementation('io.swagger.core.v3:swagger-annotations:2.2.0') implementation 'io.micronaut:micronaut-core:3.5.0' implementation "io.micronaut:micronaut-inject:3.5.0" implementation 'io.micronaut:micronaut-validation:3.5.0' implementation ('io.micronaut.reactor:micronaut-reactor:2.2.2') implementation("io.micronaut.security:micronaut-security-jwt:3.6.0") }
I have build the application and publish to local mavel.
Advertisement
Answer
The documentation has a section about retaining parameter names https://docs.micronaut.io/latest/guide/#retainparameternames