指定Swagger响应类型

时间:2014-11-13 13:48:17

标签: json web-services scala playframework swagger

我使用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)) }
}

此方法使用隐式DateBasedAutomationSummaryautomationService返回的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方法中使用我正在使用的元组。或类似的东西。有没有办法做到这一点?

请注意

  1. DateBasedAutomationSummary是一个简单的类,json结构类似。我确实有其他更复杂的类,并且可以进行更改。
  2. 我不想为所有json表示创建一个新的视图模型类层。
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为您的类型注册自定义转换器 - 请查看此处 - https://github.com/swagger-api/swagger-core/wiki/overriding-models#excluding-fields-with-a-custom-model-converter-131-and-greater

可能也可以将Write用于自定义转换器,否则您必须明确添加业务逻辑。