我使用的是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设置为仅此一个端点的默认选项?
您只需在requestMapping注释中定义响应内容类型。
那是,
@RequestMapping(value = "/text", method = RequestMethod.POST)
将被取代,
@RequestMapping(value = "/text", method = RequestMethod.POST, produces="text/plain")
意味着,您必须在requestMapping中定义此映射将返回的内容类型。
注意:如果您使用,将是一个很好的做法
@PostMapping(value = "/text", produces="text/plain")
希望,解决方案能正常工作。