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

问题描述 投票:0回答:1

我使用的是Swagger版本2.4.0和Spring Boot 2.0.4.RELEASE,并且有一个带有多个API端点的应用程序,并且默认的Swagger配置的默认生成标头值设置为application/json

swagger config.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端点。

API endpoint.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设置为仅此一个端点的默认选项?

java spring spring-boot swagger-ui swagger-2.0
1个回答
0
投票

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

那是,

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

将被取代,

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

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

注意:如果您使用,将是一个很好的做法

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

希望,解决方案能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.