Swagger: определить общий параметр для всех запросов по определенному пути @Api - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь реорганизовать некоторый код и определить широко используемый HeaderParameter (на данный момент давайте назовем его «myCommonParam») для конкретного пути @Api (один раз для контроллера). В противном случае мне пришлось бы определять HeaderParameter для каждой операции / http-запроса в моем контроллере.

После некоторого поиска я нашел способ указать globalOperationParameters через конфигурацию Springfox (пример 1).

пример 1:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                ...
                .globalOperationParameters(Collections.singletonList(
                new ParameterBuilder()
                        .name("myCommonParam")
                        .description("my common param.")
                        .modelRef(new ModelRef("string"))
                        .parameterType("header")
                        .required(false)
                        .build())
        );
    }
}

Реальная проблема с этим подходом состоит в том, что у меня есть несколько контроллеров (пути API), и я хочу, чтобы HeaderParameter применялся только для некоторых из них. Лучшее решение было бы, если бы я мог определить часто используемые параметры один раз для класса, как показывает ожидание.

фактический:

@Api(value = "firstController")
public class MyFirstController {

    public void apiOperation_1(@RequestHeader(name = "myCommonParam", required = false) @ApiParam(value = "my common param.", required = false) String myCommonParam){
        // not neccessary
    }

    public void apiOperation_2(@RequestHeader(name = "myCommonParam", required = false) @ApiParam(value = "my common param.", required = false) String myCommonParam){
        // not neccessary
    }
}

Ожидаемый результат:

@Api(value = "firstController")
>>> somehow define the 'myCommonParam' parameter here? <<<
public class MyFirstController {


    public void apiOperation_1(){
        // not neccessary
    }

    public void apiOperation_2(){
        // not neccessary
    }
}
...