簡體   English   中英

服務器日志中顯示ExceptionMapper捕獲的jaxrs中的自定義WebApplicationExceptions

[英]Custom WebApplicationExceptions in jaxrs caught by ExceptionMapper show up in server log

我使用以下Exceptionmapper將我的jaxrs rest api中的WebApplicationExceptions映射到響應。

@Provider
public class ErrorHandler implements ExceptionMapper<WebApplicationException> {
    @Override
    public Response toResponse(WebApplicationException e) {
        int status = e.getResponse().getStatus();

        JsonObject errorResponse = Json.createObjectBuilder()
                .add("status", status)
                .add("message", e.getMessage())
                .build();

        return Response.status(status)
                .entity(errorResponse)
                .type(MediaType.APPLICATION_JSON)
                .build();
    }
}

這可以正常工作,並且確實可以完成它的工作,但是當我拋出自定義錯誤時,例如throw new NotFoundException("custom message"); stacktrace顯示在我的服務器日志中。 誰能解釋一下? 還是有人知道解決方案?

TL; DR;

由於某種原因,當我從jax-rs代碼中拋出WebApplicationExceptions時,我的ExceptionMapper會處理該錯誤,但仍會拋出該錯誤,因此它會顯示在服務器日志中。

有什么辦法嗎?

我已經找到了這個問題的根源並設法解決了。

JAX-RS規范

當選擇異常映射提供程序來映射異常時,實現必須使用其泛型類型為異常的最接近超類的提供程序。

在我的ExceptionMapper我使用了WebApplicationException ,因此將映射每個錯誤。 問題在於WebApplicationException不是(例如) NotFoundException的最近的超類。 它們之間有一個ClientErrorException超類。 當我將映射器更改為該類時,問題解決了。

由於我只想將客戶端錯誤映射到Json響應,因此該解決方案對我來說效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM