Swagger: как задокументировать параметр заголовка HTTP, который используется только перехватчиком / фильтром и не отображается в сигнатуре метода - PullRequest
0 голосов
/ 13 июня 2018

У меня есть метод REST в Джерси, и у меня есть пользовательский фильтр, который применяется в качестве аннотации к методам REST:

@Priority(FilterPriorities.USER_ID_VALIDATOR)
@Provider
@UserIdCheck
public class UserIdValidatorFilter implements ContainerRequestFilter {

    @Override
    public void filter(final ContainerRequestContext requestContext) throws IOException {
        // checks presence of user-id
        ...

        // checks presence of sso-token
        String ssoToken = requestContext.getHeaderString(CustomHttpHeader.SSO_TOKEN);
        ...

        // validates SSO token against used ID
        ...
    }
}

Это мой метод REST:

@POST
@Path("/upload")
@Consumes(ExtendedMediaType.MULTIPART_FORM_DATA)
@ApiOperation(
        value = "Saves the uploaded image",
        notes = "Returns the unique id of the image.",
        response = String.class)
@ApiResponses(value = {
        @ApiResponse(code = 200, message = "The uploaded image has been saved.", response = String.class),
        @ApiResponse(code = FileTooLargeException.HTTP_STATUS, message = FileTooLargeException.SWAGGER_API_RESPONSE_MESSAGE, response = ErrorInfo.class),
        @ApiResponse(code = InvalidMediaTypeError.HTTP_STATUS, message = InvalidMediaTypeError.SWAGGER_API_RESPONSE_MESSAGE, response = ErrorInfo.class),
        @ApiResponse(code = MissingHttpHeaderException.HTTP_STATUS, message = MissingHttpHeaderException.SWAGGER_API_RESPONSE_MESSAGE, response = ErrorInfo.class),
        @ApiResponse(code = UnauthorizedRequestException.HTTP_STATUS, message = UnauthorizedRequestException.SWAGGER_API_RESPONSE_MESSAGE, response = ErrorInfo.class)})
@UserIdCheck
@Override
public String uploadImage(
        @ApiParam(value = "id of the authenticated user", required = true) @HeaderParam(CustomHttpHeader.USER_ID) final Long userId,
        @ApiParam(value = "file to upload", required = true) @FormDataParam("file") final InputStream inputStream,
        @ApiParam(value = "details of the uploaded file", required = true) @FormDataParam("file") final FormDataContentDisposition fileDetail) {

        // do something here...
    }
}

Мой пользовательскийаннотация (@UserIdCheck) проверяет, представлен ли токен sso в заголовке HTTP и является ли он действительным или нет.

Моя проблема заключается в том, что этот токен SSO не используется методом REST, поэтому он не отображается насигнатура метода, НО это должно быть в заголовке HTTP, в противном случае HTTP-запрос блокируется фильтром.

Я не могу сделать правильный тестовый запрос через пользовательский интерфейс Swagger, поскольку поле SSO_TOKEN не отображается вSwagger тестовая страница.И, конечно, это важное поле отсутствует в документации Swagger.

Я не хочу добавлять эту переменную в сигнатуру метода, поскольку она используется только фильтром, и мне не нужно это значение в методеbody.

Как правильно обрабатывать этот сценарий использования Swagger?

...