Сущность ExceptionMapper, кажется, обернута Quarkus - PullRequest
2 голосов
/ 09 февраля 2020

В Quarkus кажется, что сущность, возвращаемая преобразователем исключений, помещается в другую сущность.

Дает преобразователь исключений JAX-RS, например:

@Provider
public class WebhookExceptionMapper implements ExceptionMapper<WebhookException> {

    @Override
    public Response toResponse(final WebhookException e) {
        return Response.status(e.getError().getCode().getStatus())
                .entity(Entity.entity(e.getError(), MediaType.APPLICATION_JSON))
                .build();
    }
}

Я получаю следующее ответ об ошибке:

{
  "entity": {
    "code": "SOME_ERROR_CODE",
    "msg": "Error message"
  },
  "variant": {
    "language": null,
    "mediaType": {
      "type": "application",
      "subtype": "json",
      "parameters": {},
      "wildcardType": false,
      "wildcardSubtype": false
    },
    "encoding": null,
    "languageString": null
  },
  "annotations": [],
  "mediaType": {
    "type": "application",
    "subtype": "json",
    "parameters": {},
    "wildcardType": false,
    "wildcardSubtype": false
  },
  "language": null,
  "encoding": null
}

Я хотел бы получить следующее:

{
  "code": "SOME_ERROR_CODE",
  "msg": "Error message"

}

Возможно ли это?

1 Ответ

2 голосов
/ 09 февраля 2020

Как видно из названия пакета, класс javax.ws.rs.client.Entity предназначен только для использования на стороне клиента. На стороне сервера вам не нужно его использовать. На самом деле вы видите сериализованный объект Entity, а не ошибку.

Если вы хотите установить тип, просто используйте метод type() для Response.ResponseBuilder (что вы вернетесь от звонка Response.status()). И чтобы установить тело просто используйте метод entity().

return Response.status(e.getError().getCode().getStatus())
        .entity(e.getError())
        .type(MediaType.APPLICATION_JSON)
        .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...