![](/img/trans.png)
[英]ExceptionMapper for WebApplicationExceptions thrown with entity?
[英]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會處理該錯誤,但仍會拋出該錯誤,因此它會顯示在服務器日志中。
有什么辦法嗎?
我已經找到了這個問題的根源並設法解決了。
當選擇異常映射提供程序來映射異常時,實現必須使用其泛型類型為異常的最接近超類的提供程序。
在我的ExceptionMapper
我使用了WebApplicationException
,因此將映射每個錯誤。 問題在於WebApplicationException
不是(例如) NotFoundException
的最近的超類。 它們之間有一個ClientErrorException
超類。 當我將映射器更改為該類時,問題解決了。
由於我只想將客戶端錯誤映射到Json響應,因此該解決方案對我來說效果很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.