我正在使用spring-fox2 @ApiImplicitParam
注释来使swagger-ui显示一个包含请求的Authorization标头的框:
@ApiImplicitParams({
@ApiImplicitParam(
name="Authorization",
value="authorization header containing the bearer token",
paramType = "header"
)
})
public void someControllerMethod() {
...
}
这很好用,但我需要控制器中每个方法的此授权标头。复制和粘贴这是代码味道。我可以为此定义某种快捷方式注释吗?是否有一种不同的方式告诉swagger-ui为授权标题创建输入字段?
谢谢!
答案 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
。