在Swagger ApiAuthorizationFilter中访问@ApiOperation属性

时间:2014-07-21 13:13:35

标签: java scala jax-rs swagger

我有一个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
}

现在,当我尝试访问params时,它是空的。 相反,我可以从operation.parameters()打印参数,但我也无法访问它们,因为我得到一个带参数的Scala列表。

一般来说,过滤器在启动Swagger-UI时是访问权限,所以它似乎在我的web.xml中正确传递。

这是我身边的一个愚蠢的错误,或者我如何能够访问参数?

作为一种解决方法,我也不介意从@ApiModelProperty注释中访问参数。

2 个答案:

答案 0 :(得分:2)

以下是访问isOperationAllowed方法中Scala参数的示例代码:

@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( ... ) { ... }

答案 1 :(得分:0)

我认为我的问题有点不精确,所以我会关闭它。 我错误地尝试访问@ApiOperation属性,而是阅读@ApiParams。

为了澄清我的实际需要,我提出了一个单独的问题https://stackoverflow.com/questions/24868665/accessing-attribute-hidden-of-apioperation-annotation-in-swagger