Следующий код является примером для лучшего воображения:
@GET
@Path("/pet/get/{petId}")
@Produces({MediaType.APPLICATION_JSON})
public javax.ws.rs.core.Response findPet(@PathParam("petId") String petId) {
try {
// throws whatever exception - server down, failed connection to database etc.
Pet petInstance = findPetById(petId);
return javax.ws.rs.core.Response
.status(Response.Status.OK)
.entity(petInstance)
.type(MediaType.APPLICATION_JSON)
.build();
} catch (Exception ex) {
return javax.ws.rs.core.Response
.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(ex)
.type(MediaType.TEXT_PLAIN)
.build();
}
}
Допустим, у меня есть метод, который возвращает экземпляр Pet на основе его идентификатора. Класс Pet содержит JSON аннотаций, и, таким образом, метод производит вывод JSON (как я хочу, чтобы он создавал).
Каково правильное поведение при возврате ответа в случае любой ошибки / исключения? Допустим, я хочу вернуть код состояния и дополнительный текст об исключении . Можно ли возвращать ответ с другим типом носителя, как определено (как в примере)? Или я должен создать аннотированный класс JSON, который будет представлять информацию об исключении? Или есть какой-то другой подход?
Примечание: я знаком с javax.ws.rs.WebApplicationException и сопоставлением исключений (как описано, например, здесь ), но мне кажется, что это не касается типов носителей.
Спасибо