[英]Resteasy ExceptionMapper returning no result
我正在為EJB服務開發REST外觀,這意味着它調用EJB,將結果轉換為REST調用者將理解的表示形式,然后將其返回(以json或xml格式)。 所有這些工作都很出色。 但是EJB服務會引發各種異常,例如,當未找到結果或其他幾種情況時。 由於我不希望那些傳播到REST調用程序的人,我實現了ExceptionMapper:
public class EjbExceptionMapper implements ExceptionMapper<EJBException> {
private static final Logger logger = LoggerFactory.getLogger(EjbExceptionMapper.class);
@Override
public Response toResponse(final EJBException exception) {
ResponseBuilder result = Response.status(Status.BAD_REQUEST);
logger.debug("Bad request:", exception);
if (exception.getCause() != null) {
final Throwable cause = exception.getCause();
if (cause instanceof NoDeliveryFoundException) {
logger.debug("Found NoDeliveryFoundException:", cause);
result = Response.status(Status.NO_CONTENT).entity(cause.getMessage());
}
}
return result.build();
}
}
我的EJB服務中的所有異常javax.ejb.EJBException
到達,該Mapper設法很好地捕獲了異常,並以應用程序的不同自定義Exception為原因。 計划根據EJBException的原因類型返回不同的Responses。 萬一我收到NoDeliveryFoundException作為原因,都會執行用於調試的logger調用,因此我知道它已執行(Mapper已正確注冊並用於映射),但是客戶端從未看到響應。
導致基礎服務中的EJBException的每個調用(以及因此使用此ExceptionMapper的調用)都根本沒有響應,就好像toResponse()方法返回null而不是自定義構建的Response一樣。
我什至可以在返回響應之前立即記錄響應,它存在並且包含我所期望的內容,因此我很肯定它是由toResponse方法返回的。 但是,我的客戶仍未收到任何回復。
所以現在我很困惑,由於沒有搜索能夠找到描述類似問題的人,所以親愛的,我求助於您。 ;)
您的toResponse
方法包含一些沖突的邏輯。
Response.status(Status.NO_CONTENT).entity(cause.getMessage());
在這里,您將分配HTTP狀態代碼204 No Content
,但同時還要添加一個響應。 您不能將狀態設置為204 No Content
並同時返回響應正文。
另外,如果Exception#getCause()
為null或它不是 NoDeliveryFoundException
的實例,則響應主體為空。
這可能是您遇到問題的原因嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.