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.
Nie wiem, Swagger, ale może wspiera stereotypy. W ten sposób możesz zmniejszyć wszystkie adnotacje @ApiXxx do jednego. – Thomas
Zakładam, że głównym problemem jest @ApiResponse? – Ron
Czy Swagger obsługuje meta-adnotacje? Takie jest zwykłe podejście wiosenne. – chrylis