2014-11-14 9 views
5

Nel mio progetto creiamo interfacce REST usando RestEasy e usiamo Swagger per documentarle. Il problema è che questo richiede molte annotazioni, e potrebbe essere simile alla seguente:annotazioni REST disordinate

@ApiOperation(value = "Create a person object", 
     notes = "Create a person object" + 
       "Return the newley created person object", 
     response = Person.class) 
@ApiResponses({ 
     @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "Internal server error"), 
     @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = "Unauthorized"), 
     @ApiResponse(code = HttpStatus.SC_PRECONDITION_FAILED, message = "Precondition failed"), 
     @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = "Bad request"), 
     @ApiResponse(code = HttpStatus.SC_UNPROCESSABLE_ENTITY, message = "Unprocessable entity") 
}) 
@POST 
@Path("rest/v1/persons") 
@Consumes({MediaType.APPLICATION_JSON}) 
@Produces({MediaType.APPLICATION_JSON}) 
Person createPerson(
     @HeaderParam("SecurityToken") String token, 
     @ApiParam(value = "person", defaultValue = "{ \"name\": = \"Bart Simpson\", \"age\": = 9 }") Person person); 

La maggior parte delle annotazioni sembrano più o meno la stessa in tutti i nostri metodi. Quindi copiamo e incolliamo molto, e tutte queste annotazioni rendono le nostre interfacce del tutto illeggibili ed è difficile dire esattamente cosa stanno facendo i metodi.

Quindi mi chiedo se qualcuno ha un'idea su come potremmo avere la stessa funzionalità ma in qualche modo nascondere tutte quelle annotazioni, o almeno alcune di esse.

+0

Non conosco Swagger ma forse supporta gli stereotipi. In questo modo potresti essere in grado di ridurre tutte le annotazioni @ApiXxx a una. – Thomas

+0

Suppongo che il problema principale sia con @ApiResponses? – Ron

+0

Swagger supporta le meta-annotazioni? Questo è il solito approccio di primavera. – chrylis

risposta

0

Creare annotazioni personalizzate e annotarle con annotazioni jaxrs e swagger. Primavera di RestController è un buon esempio:

@Controller 
@ResponseBody 
public @interface RestController { 

} 

Edit: Se meta-annotazioni non è supportato da Swagger e/o RESTEasy, si può sempre provare APT come una soluzione.