我使用Play Framework将以下控制器方法公开为REST服务。我正在使用Swagger生成服务的描述。
@ApiOperation(
nickname = "..",
value = "..",
response = classOf[???],
httpMethod = "GET")
def dateBasedCampaignsSummaryReport(
profileId: Int,
start: Int,
size: Int,
filterZeroSent: Boolean = false) = {
import JsonConverters.dateBasedAutomationSummaryWrites
automationService
.dateBasedCampaignsSummaryReport(profileId, start, size, filterZeroSent)
.map { res => Ok(Json.toJson(res)) }
}
此方法使用隐式DateBasedAutomationSummary
将automationService
返回的Write
类型的对象转换为json:
implicit def dateBasedAutomationSummaryWrites: Writes[DateBasedAutomationSummary] =
(
(__ \ 'name).write[String] and
(__ \ 'dateTime).write[String] and
(__ \ 'isInProgress).write[Boolean])(as =>
(
as.name,
dateTime2String(as.scheduledDateTime, "d MMM YYYY 'at' HH:mm"),
as.isInProgress))
Swagger要求我提供一个与response
属性一起使用的类型。因为我使用Write
对象来创建我的json,所以我的原始类型(DateBasedAutomationSummary
)的结构发生了变化,我无法使用它。我想在dateBasedAutomationSummaryWrites
方法中使用我正在使用的元组。或类似的东西。有没有办法做到这一点?
请注意
DateBasedAutomationSummary
是一个简单的类,json结构类似。我确实有其他更复杂的类,并且可以进行更改。谢谢!
答案 0 :(得分:1)
您可以为您的类型注册自定义转换器 - 请查看此处 - https://github.com/swagger-api/swagger-core/wiki/overriding-models#excluding-fields-with-a-custom-model-converter-131-and-greater。
您可能也可以将Write
用于自定义转换器,否则您必须明确添加业务逻辑。