Skip to content

Issue with subresources not annotated with @Path #633

@GuiSim

Description

@GuiSim

Hi !

If you have a resource such as:

@Path("test")
@Produces(MediaType.APPLICATION_JSON)
@Api("test")
public class TestResource
{
    @Path("/status")
    @GET
    @ApiOperation("Get status")
    public String getStatus()
    {
        return "{\"status\":\"OK!\"}";
    }

    @Path("/more")
    public TestSubResource getSubResource()
    {
        return new TestSubResource();
    }
}

and a subresource such as:

@Produces(MediaType.APPLICATION_JSON)
public class TestSubResource
{
    @Path("/otherStatus")
    @GET
    @ApiOperation("Get the other status!")
    public String otherStatus()
    {
        return "{\"a\":\"Still Ok!\"}";
    }
}

When accessing the Swagger spec under /api-docs/, you will get the following result:

{

    "apiVersion": "v9",
    "swaggerVersion": "1.2",
    "apis": [
        {
           "path": "/test"
        }
    ]
}

Under /api-docs/test you will get the following result:

{

    "apiVersion": "v9",
    "swaggerVersion": "1.2",
    "basePath": "/rest",
    "resourcePath": "/test",
    "produces": [
        "application/json"
    ],
    "apis": [
        {
            "path": "/test/status",
            "operations": [
                {
                    "method": "GET",
                    "summary": "Get status",
                    "notes": "",
                    "type": "void",
                    "nickname": "getStatus",
                    "parameters": [ ]
                }
            ]
        }
    ]

}

As you can see, the /test/more/otherStatus method is not documented in the Swagger spec.

Adding the @Api annotation on the TestSubResource sub resource fixes the issue but introduces a new one. Now the calls are documented correctly in /api-docs/test BUT the methods under the TestSubResource resource are visible under /api-docs.

This should not be the case as example.org/more/otherStatus is not a valid API call. It is only accessible through the TestResource resource using example.org/test/more/otherStatus.

EDIT: typos

Metadata

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