Доступ к атрибутам @ApiOperation в Swagger ApiAuthorizationFilter

1

У меня есть веб-сервис Jax-RS, который я документирую с помощью Swagger. Теперь я хочу проверить параметры из аннотации @ApiOperation каждого метода, чтобы сделать некоторую фильтрацию.

@GET
@ApiOperation(value = "a description", response = String.class, hidden=true)
public static Response get(){}

Я создал ApiAuthorizationFilterImpl в соответствии с этим примером:

https://github.com/wordnik/swagger-core/blob/master/samples/java-jaxrs/src/main/java/com/wordnik/swagger/sample/util/ApiAuthorizationFilterImpl.java#L60

Я перезаписал метод isOperationAllowed:

public boolean isOperationAllowed(Operation operation, ApiDescription api, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {

       System.out.println("params: "+params.keySet()); //<--params is empty
}

Теперь, когда я пытаюсь получить доступ к параметрам, он пуст. Напротив, я могу распечатать параметры из operation.parameters(), но я также не могу получить к ним доступ, так как я получаю список Scala с параметрами.

Фильтр, как правило, имеет доступ при запуске Swagger-UI, поэтому он, кажется, правильно передается в моем web.xml.

Это глупая ошибка с моей стороны или как я могу получить доступ к параметрам?

В качестве обходного пути я также не против доступа к параметрам из аннотации @ApiModelProperty.

Теги:
swagger
jax-rs

2 ответа

2
Лучший ответ

Здесь пример кода для доступа к параметрам Scala внутри метода isOperationAllowed:

@Override
public boolean isOperationAllowed( Operation operation, ApiDescription api, Map< String , List< String >> params, Map< String , String > cookies, Map< String , List< String >> headers ) {

    scala.collection.immutable.List< Parameter > paramList = operation.parameters();

    for ( int i = 0; i < paramList.length(); i++ ) {

        Parameter myparam = paramList.apply( i );

        if ( myparam.paramAccess().isDefined() && myparam.paramAccess().get().equals( "private" ) ) {
            return false;
        }
        else {
            return true;
        }
    }
}

Мой класс REST аннотируется следующим образом:

@POST
@ApiOperation( value = "create" )
@ApiImplicitParam( access = "private" )
public Response create( ... ) { ... }
  • 0
    Это то, что я искал. Благодарю. Но мне пришлось использовать его немного по-другому: @ApiImplicitParams (value = {@ApiImplicitParam (access = "")}).
0

Я думаю, что мой вопрос немного неточен, поэтому я его закрою. Я сделал ошибку, пытаясь получить доступ к атрибутам @ApiOperation, но вместо этого прочитал @ApiParams.

Чтобы уточнить мои фактические потребности, я открыл отдельный вопрос https://stackoverflow.com/questions/24868665/accessing-attribute-hidden-of-apioperation-annotation-in-swagger.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню