簡體   English   中英

Resteasy ExceptionMapper沒有返回結果

[英]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.

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