如何覆盖Swagger的默认值产生标头值?

时间:2019-04-02 10:51:13

标签: java spring spring-boot swagger-ui swagger-2.0

我正在使用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 :(得分:0)

您只需要在requestMapping批注中定义响应内容类型。

也就是说,

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

将替换为

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

意味着,您必须在requestMapping中定义此映射将返回的内容类型。

注意:如果您使用

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

希望,该解决方案可以正常工作。