2017-07-28 4 views
7

Wie konvertiert man die folgenden Swagger Annotationen von Java nach Kotlin?Wie verwendet man Swagger @ ApiResponses Annotation in Kotlin?

@ApiResponses(value = { @ApiResponse(code = 200, message = "Given admin user found"), 
      @ApiResponse(code = 404, message = "..."), 
      @ApiResponse(code = 500, message = "..."), 
      @ApiResponse(code = 400, message = "..."), 
      @ApiResponse(code = 412, message = "...") }) 

Dies funktioniert nicht:

@ApiResponses(value = listOf( 
     ApiResponse(code = 200, message = "..."), 
     ApiResponse(code = 404, message = "..."), 
     ApiResponse(code = 500, message = "..."), 
     ApiResponse(code = 400, message = "..."), 
     ApiResponse(code = 412, message = "..."))) 

Der Fehler ist:

Type inference failed. Expected type mismatch: inferred type is List but ApiResponse was expected

Es funktioniert, wenn ich nur eine @ApiResponse statt listOf() verwenden, aber ich muss mehr @ApiResponse(s) definieren.

Ich benutze Swagger 2.5.0

+0

Anmerkungen erwarten Arrays, nicht Listen, versuchen Sie es mit der 'arrayOf'-Funktion anstelle von' listOf() ' – Robin

+0

Nun habe ich Fehler:' Typ Rückschluss fehlgeschlagen. Erwarteter Typ stimmt nicht überein: abgeleiteter Typ ist Array , aber ApiResponse wurde erwartet ' – Frido

+0

Ja, das ist sehr merkwürdig. Ich bin versucht zu sagen, dass dies ein Fehler in Kotlin sein könnte. – Plog

Antwort

6

Wie in the Kotlin Language Reference erklärte:

If the value argument [of an Annotation] in Java has an array type, it becomes a vararg parameter in Kotlin

So, Ihr Beispiel funktioniert, müssen Sie es wie so setzen:

@ApiResponses(
    ApiResponse(code = 200, message = "..."), 
    ApiResponse(code = 404, message = "..."), 
    ApiResponse(code = 500, message = "..."), 
    ApiResponse(code = 400, message = "..."), 
    ApiResponse(code = 412, message = "...") 
) 
Verwandte Themen