Веб-сервисы RESTful - создание другого типа медиа при возврате ответа в случае ошибки - PullRequest
0 голосов
/ 07 апреля 2020

Следующий код является примером для лучшего воображения:

  @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 и сопоставлением исключений (как описано, например, здесь ), но мне кажется, что это не касается типов носителей.

Спасибо

...