gpt4 book ai didi

java - Resteasy ExceptionMapper 不返回结果

转载 作者:行者123 更新时间:2023-12-01 23:35:25 31 4
gpt4 key购买 nike

我正在为 EJB 服务开发 REST-facade,这意味着它调用 EJB,将结果转换为 REST 调用者能够理解的表示形式,然后返回它(作为 json 或 xml)。所有这些都表现出色。但是 EJB 服务会抛出各种异常,例如: G。当没有找到结果或其他一些不同的情况时。因为我不希望这些传播到 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 形式到达,该映射器能够很好地捕获这些异常,并将应用程序的不同自定义异常作为原因。计划是根据 EJBException 原因的类型返回不同的响应。用于调试的记录器调用都会在我收到 NoDeliveryFoundException 作为原因时执行,因此我知道它已执行(映射器已正确注册并用于映射),但客户端永远看不到响应。

在底层服务中导致 EJBException 的每个调用(因此使用此 ExceptionMapper)根本不会导致任何响应,就好像 toResponse() 方法返回 null 而不是自定义构建的响应一样。

我什至在返回响应之前记录了响应,它存在并包含我所期望的内容,所以我确信它是由 toResponse 方法返回的。但我的客户仍然没有收到任何回复。

所以现在我很困惑,因为没有搜索能够找到描述类似问题的人,所以我转向你,亲爱的SO。 ;)

最佳答案

您的toResponse方法包含一些冲突的逻辑。

Response.status(Status.NO_CONTENT).entity(cause.getMessage());

您在此处分配了 HTTP 状态代码 204 No Content,但您还添加了响应。您无法将状态设置为 204 No Content 并同时返回响应正文。

此外,如果 Exception#getCause() 为 null 或者它不是 NoDeliveryFoundException 的实例,则响应正文为空。

这可能是您出现问题的原因吗?

关于java - Resteasy ExceptionMapper 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18782868/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com