当前位置: 首页 > 知识库问答 >
问题:

Resteasy ExceptionMapper未返回结果

宋建柏
2023-03-14

我正在为EJB服务开发一个REST-facade,这意味着它调用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,此映射程序可以很好地捕获它,原因是应用程序的不同自定义异常。计划是根据EJBException原因的类型返回不同的响应。用于调试的记录器调用都是在我得到NoDeliveryFoundException作为原因的情况下执行的,因此我知道它已执行(映射器已正确注册并用于映射),但客户端从未看到响应。

在基础服务中导致EJBException的每个调用(以及使用此ExceptionMapper)都不会导致任何响应,就像toResponse()方法返回null而不是自定义生成的响应一样。

我甚至在返回响应之前记录了它,它存在并包含了我所期望的内容,所以我肯定它是由toReport-method返回的。但是,我的委托人仍然没有收到任何回应。

所以现在我被难住了,因为没有任何搜索能够找到描述类似问题的人,所以我求助于你,亲爱的苏

共有1个答案

尹光辉
2023-03-14

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

响应。状态(状态。无内容)。实体(cause.getMessage())

在这里,您分配了HTTP状态代码204 No Content,但您也添加了响应。您不能将状态设置为204 No Content并同时返回响应主体。

此外,如果Exc0019#get原因()为空,或者如果它不是NoDeliveryFoundExc0019的实例,则响应体为空。

这可能是你的问题的原因吗?

 类似资料:
  • 我正在创建,比如说,15个Callable任务,并提交它们: 然后我收集15个MyResult对象: 问题是:我没有从get()方法获得所有15个MyResult对象,而是有时获得不到15个对象。有时12有时10有时甚至更少,有时全部15。 我的印象是,方法是一个阻塞调用,将等待所有15个线程返回各自的结果,但看起来我错过了其中的一些线程并继续前进。我做错了什么?我是否未正确收集结果/等待结果?当

  • getAllTransactions()调用运行时没有异常,但不返回结果。另一方面,getMyTransactions()返回select查询结果。 在viewModel: 在活动中:

  • 我在过去使用过JSoup并能够将XPath转换为选择器,但是在一个已经改变的站点上,我无法获得这个表的结果。 Firefox为表 两个都不起作用。即使在Try JSoup链接 第一个第n个子表本身返回NULL。 你知道这个页面有什么特别之处吗? 我将用户代理字符串设置为

  • 问题内容: 我正在通过ElasticSearch NEST C#客户端运行一个简单的查询。通过http运行相同的查询时收到结果,但是从客户端返回的文档数量为零。 这就是我填充数据集的方式: 此POST请求返回JSON结果: 这是我没有返回任何代码的代码。 我想念什么?提前致谢 .. 问题答案: NEST尝试猜测类型和索引名称,在您的情况下,它将使用/ blog / blogentries 因为您告

  • 问题内容: 我正在使用Newtonsoft的Json.Net从以下json中选择节点: 以下C#代码段 产量: 现在,这很酷,我想做的是按客户端代码过滤,我认为 可以,但是我显然对语法不够了解。这将返回一个空列表: 并且单个令牌选择器返回null: 我在https://jsonpath.curiousconcept.com/上尝试了几种不同的配置,看来我的查询语法确实坏了。 使用Flow Comm

  • 我对Firebase/Firestore/Cloud函数相当陌生,一直在尝试一个小项目,在这个项目中,客户端应用程序调用Firebase Cloud函数来生成一些随机键(随机数),将它们添加到Firestore,成功编写后,将这些键返回到客户端应用程序。有点像随机数发生器。 客户端正确调用该函数(根据Firebase控制台),确实生成密钥,检查它们是否存在于Fi还原中,如果不添加它们。所有的工作直