Skip to content

Feature Request - Ignoring methods in the interface with an annotation #4130

Open

Description

I have multiple interfaces for different external services which some of interfaces are implemented via Retrofit and some have a custom implementation. Therefore, I needed to put a base interface as the contract for all clients. Here is the example

@Scope(SCOPE_PROTOTYPE)
interface BaseApiClient {

    fun type(): Type

    fun supports(type: Type): Boolean = type == type()

    fun create(
        headers: Map<String, String> = hashMapOf(),
        body: CreateClientRequestRestModel
    ): Mono<CreateClientResponseRestModel>

}

and the retrofit interface is

interface RetrofitClient : BaseApiClient {

    override fun type() = EXTERNAL_ONE

    @POST("api/blah/blah")
    override fun create(
        @HeaderMap headers: Map<String, String>,
        @Body body: @JvmSuppressWildcards CreatClientRequestRestModel
    ): Mono<CreateClientResponseRestModel>

}

I am encountering this error

Caused by: java.lang.IllegalArgumentException: HTTP method annotation is required (e.g., @GET, @POST, etc.).
    for method RetrofitClient.type

is there a way to just add a @Ignore annotation and tell to retrofit ignores the methods that are not annotation with http verb annotations? something like the below

interface RetrofitClient : BaseApiClient {
    
    @Ignore // -> This is a new annotation
    override fun type() = EXTERNAL_ONE

    @POST("api/blah/blah")
    override fun create(
        @HeaderMap headers: Map<String, String>,
        @Body body: @JvmSuppressWildcards CreatClientRequestRestModel
    ): Mono<CreateClientResponseRestModel>

}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions