Как контролировать способ, которым Swagger генерирует модель / схему для типа

Я смог настроить Swagger с помощью Play и попробовать Swagger-ui... и я должен сказать, что это действительно здорово.

Документирование действий моего контроллера с ApiOperation, ApiImplicitParaи т. д. было легко и работает как положено.

Тем не менее, из-за моего ограниченного знания Swagger, у меня есть проблема при определении схемы для неявного параметра типа body, Класс, который я хочу отобразить в неявный параметр, выглядит следующим образом:

@ApiModel(value "User", description = "Represents an user")
class User private(private var json: JsValue) {

  private def setValue(key: JsPath, value: JsValue) = {
    value match {
      case JsNull => json.transform(key.json.prune).map(t => json = t)
      case _ => json.transform((__.json.update(key.json.put(value)))).map(t => json = t)
    }
  }

  def asJson = json

  @ApiModelProperty(value = "User's id", dataType = "String", required = false)
  def id_= (v: Option[String]) = setValue((__ \ 'id), Json.toJson(v))
  def id = json as (__ \ 'id).readNullable[String]
  @ApiModelProperty(value = "User's email address", dataType = "String", required = true)
  def email = json as (__ \ 'email).read[String]
  def email_= (v: String) = setValue((__ \ 'email), Json.toJson(v))
  @ApiModelProperty(value = "User's firstName", dataType = "String", required = true)
  def firstName = json as (__ \ 'firstName).read[String]
  def firatName_= (v: String) = setValue((__ \ 'firstName), Json.toJson(v))
  ...
}

object User {

  def apply(
    id: Option[String],
    email: String,
    firstName: String,
  ): JsResult[User] = apply(Json.obj(
    "id" -> id,
    "email" -> email,
    "firstName" -> firstName,
    ...
  ))
}

Внутренним представлением моих классов моделей является JSON... и затем я просто предоставляю методы получения и установки, которые читают / изменяют внутренний JSON - это решение позволяет мне очень быстро обрабатывать JSON, и я могу передать объект как есть в MongoDB.

Проблема в том, что модель, сгенерированная Swagger для класса выше, выглядит следующим образом:

User {
  json(JsValue),
  id(String): User's id,
  email(String): User's email,
  firstName(String): User's first name,
  ...
}

Как я могу помешать Swagger поставить json в модели?

1 ответ

Попробуй это:

 @ApiModelProperty(required = false, hidden = true) 
 def asJson = json
Другие вопросы по тегам