重用复杂的spring-fox swagger注释

时间:2016-04-07 11:56:02

标签: java spring annotations swagger springfox

我正在使用spring-fox2 @ApiImplicitParam注释来使swagger-ui显示一个包含请求的Authorization标头的框:

@ApiImplicitParams({
        @ApiImplicitParam(
                name="Authorization",
                value="authorization header containing the bearer token",
                paramType = "header"
        )
})
public void someControllerMethod() {
    ...
}

这很好用,但我需要控制器中每个方法的此授权标头。复制和粘贴这是代码味道。我可以为此定义某种快捷方式注释吗?是否有一种不同的方式告诉swagger-ui为授权标题创建输入字段?

谢谢!

2 个答案:

答案 0 :(得分:3)

解决问题的另一种方法是根本不使用注释。而是使用文档到add global operation parameters看到#22。您可以将标题添加到文档中的所有操作。

这种方法的缺点可能是您可能最终配置了多个联系人,以便您预先选择(参见#4,#5,#6)将这些参数添加到哪些操作。

答案 1 :(得分:0)

作为一种替代解决方案(我不知道上面的选项),我创建了自己的注释,像这样重用ApiImplicitParam:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
@ApiImplicitParams({
    @ApiImplicitParam(dataType = "string", paramType = "header", name = HttpHeaders.AUTHORIZATION, value = Constants.ApiKey.DESC),
})
public @interface ApiGetMappingV2 {
    /**
     * Alias for {@link RequestMapping#name}.
     */
    @AliasFor(annotation = RequestMapping.class)
    String name() default "";

    /**
     * Alias for {@link RequestMapping#value}.
     */
    @AliasFor(annotation = RequestMapping.class)
    String value() default "";
}

然后我只使用该注解而不是映射一个:

    @ApiGetMapping("/foo")
    @ApiOperation(value = "List all available foos")
    public List<Foo> all() throws MyCustomApiException {

由于它使用的目标,因此这种方法不适用于@ApiParam