2014-02-24 2 views
6

I Swagger mit Spielen und versuchen Swagger-ui-Setup konnte ... und ich muss sagen, es ist wirklich toll.Wie die Art und Weise Swagger zu steuern, erzeugt das Modell/Schema für einen Typ

Dokumentieren der Aktionen meines Controllers mit ApiOperation, ApiImplicitPara usw. war einfach und es funktioniert wie erwartet.

Aufgrund meiner begrenzten Kenntnisse von Swagger, habe ich ein Problem bei der Definition des Schemas für einen impliziten Parameter vom Typ body. Die Klasse I auf den impliziten Parameter zuordnen möchten sieht wie folgt aus:

@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, 
    ... 
)) 
} 

Die interne Darstellung meiner Modellklassen JSON ist ... und dann, das ich gerade Getter und Setter bieten lesen/ändern die interne JSON – diese Lösung lassen Sie mich sehr schnell mit JSON umgehen und ich kann das Objekt unverändert an MongoDB übergeben.

Das Problem ist, dass das Modell von Swagger für die Klasse erzeugt oben ist wie folgt:

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

Wie verhindere ich von Swagger json im Modell setzen?

Antwort

1

Versuchen Sie folgendes:

@ApiModelProperty(required = false, hidden = true) 
def asJson = json 
Verwandte Themen