Как заставить ExceptionMapper работать в собственном режиме

#native #quarkus #graalvm

#родной #кваркус #graalvm

Вопрос:

Я работаю над приложением с quarkus и пытаюсь создать ExceptionMapper, чтобы избавиться от ошибок HTML при вызове служб rest. Это нормально работает в режиме разработки или в fat jars, но не в собственном режиме:

Это мой картограф исключений

 @Provider
//@RegisterForReflection -> even with this it doesn't work
public class DefaultErrorMapper implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(Exception exception) {
        int code = 500;
        
        if (exception instanceof WebApplicationException) {
            code = ((WebApplicationException) exception).getResponse().getStatus();
        }
        
        exception.printStackTrace();
        
        return Response.status(code)
                .entity(Json.createObjectBuilder().add("error", "unknown exception").add("code", code).build())
                .build();
    }

}
 

Это моя служба ресурсов

 @POST
@Transactional
public Response addMyEntity(MyEntity myEntity) {
    try {
        service.addMyEntity(myEntity);
        return Response.ok().build();
    } catch (FormularioInvalidoException e) {
        return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
    } catch (Exception e) {
        return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Unknown error").build();
    }
}
 

Когда я вызываю POST в режиме разработки или из fat jar, созданного с помощью «./mvnw package -Dquarkus.package.type=uber-jar» и выдает ошибку, она работает нормально и показывает следующее

 {
    "error": {
        "chars": "Unknown error",
        "string": "Unknown error",
        "valueType": "STRING"
    },
    "code": {
        "integral": true,
        "valueType": "NUMBER"
    }
}
 

Но при запуске в собственном режиме

 <html lang="en">

<head>
    <title>Internal Server Error - Error id c81bed52-1d75-46e9-917d-310dda5d3212-2</title>
    <meta charset="utf-8">
... more html ...
 

Поэтому мне нужно получать ответ об ошибке вместо HTML в собственном режиме всякий раз, когда возникает ошибка. Есть ли что-то еще, что я должен настроить?

Спасибо!

Комментарии:

1. Странно, я пробовал в одном из своих проектов и, похоже, работает. Можете ли вы открыть проблему с репродуктором в github.com/quarkusio/quarkus/issues ? Спасибо!