我正在使用Swagger版本2.4.0和Spring Boot 2.0.4.RELEASE,并且具有一个带有多个API端点且默认Swagger配置具有默认设置的标头值设置为application/json
的应用程序。
@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端点。
@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设置为仅此端点的默认选项?
答案 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")
希望,该解决方案可以正常工作。