Как переопределить Swagger по умолчанию производит значение заголовка? - PullRequest
0 голосов
/ 02 апреля 2019

Я использую Swagger версии 2.4.0 и Spring Boot 2.0.4.RELEASE, и у меня есть приложение с несколькими конечными точками API и со стандартной конфигурацией Swagger со значением по умолчанию, при котором значение заголовка устанавливается равным application/json.

SwaggerConfig.java

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES = ImmutableSet.of(
            "application/json"
    );

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .produces(DEFAULT_PRODUCES_AND_CONSUMES)
                .consumes(DEFAULT_PRODUCES_AND_CONSUMES);
    }
}

И с настройкой конечной точки API.

ApiEndpoint.java

@Consumes(MediaType.APPLICATION_JSON)
@Api(value = "/transform", protocols = "http, https")
@RequestMapping(value = "/transform")
public interface ApiEndpoint {

    @POST
    @RequestMapping(value = "/text", method = RequestMethod.POST)
    @ApiOperation(value = "Transform to plain text", produces = MediaType.TEXT_PLAIN)
    @CrossOrigin
    String transformToText(@RequestBody TransformRequest transformRequest) throws Exception;
}

Теперь я хочу, чтобы эта конечная точка выдавала ответ с типом содержимого, представляющим собой только простой текст, но SwaggerConfig добавляет опцию application/json по умолчанию. Поэтому, чтобы правильно использовать эту конечную точку, мне нужно было бы каждый раз менять тип содержимого ответа с application/json на text/plain, что довольно быстро раздражало бы, учитывая, что эта конечная точка используется для тестирования. Есть ли способ переопределить SwaggerConfig или добавить параметр, чтобы text / plain был единственным вариантом, или, по крайней мере, установить text / plain в качестве параметра по умолчанию только для этой одной конечной точки?

1 Ответ

0 голосов
/ 03 апреля 2019

Вы просто должны определить тип содержимого ответа в аннотации requestMapping.

То есть

 @RequestMapping(value = "/text", method = RequestMethod.POST)

будет заменено на,

 @RequestMapping(value = "/text", method = RequestMethod.POST, produces="text/plain")

Значит, вы должны определить в requestMapping, какой тип контента будет возвращать это отображение.

Примечание: Будет хорошей практикой, если вы используете

@PostMapping(value = "/text", produces="text/plain")

Надеюсь, решение будет работать нормально.

...