2014-11-14 10 views
5

W moim projekcie tworzymy interfejsy REST przy użyciu RestEasy i używamy Swagger do ich dokumentowania. Problemem jest to, że wymaga to wiele adnotacji, a może wyglądać następująco:Messy Adnotacje REST

@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); 

Większość adnotacji wyglądać mniej więcej taka sama we wszystkich naszych metod. Dlatego też dużo kopiujemy i wklejamy, a wszystkie te adnotacje sprawiają, że nasze interfejsy są zupełnie nieczytelne i trudno jest dokładnie określić, co robią te metody.

Zastanawiam się, czy ktoś ma pomysł, w jaki sposób możemy mieć tę samą funkcjonalność, ale jakoś ukryć wszystkie te adnotacje, a przynajmniej niektóre z nich.

+0

Nie wiem, Swagger, ale może wspiera stereotypy. W ten sposób możesz zmniejszyć wszystkie adnotacje @ApiXxx do jednego. – Thomas

+0

Zakładam, że głównym problemem jest @ApiResponse? – Ron

+0

Czy Swagger obsługuje meta-adnotacje? Takie jest zwykłe podejście wiosenne. – chrylis

Odpowiedz

0

Twórz niestandardowe adnotacje i dodawaj do nich adnotacje adnotacjami typu jaxy i swagger. Wiosna na RestController jest dobrym przykładem:

@Controller 
@ResponseBody 
public @interface RestController { 

} 

Edycja: Jeśli meta-adnotacje nie jest obsługiwany przez Swagger i/lub RestEasy, zawsze można spróbować APT jako rozwiązanie.