问题标签 [exceptionmapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1087 浏览

java - ExceptionMapper 在灰熊中不起作用

对不起我的英语不好。我正在使用 grizzly 和 jersey 来构建一个 Web 应用程序。

我这样实现

当我访问一个不存在的页面时。我发现它抛出了一个 WebApplicationException。所以我调试并发现这个方法被调用并返回上面的响应。但最后,http 响应是一个由 grizzly 构建的 html 页面。我应该怎么办

0 投票
0 回答
719 浏览

java - 让 ExceptionMapper 根据异常的来源返回不同的响应类型

我有一个名为 NotFoundExceptionMapper 的 ExceptionMapper,我需要这样做:

我需要这样的原因是因为在我的 REST 层中,ClassA 类中的每个方法本质上都具有完全相同的 try & catch 错误处理,从而导致大量冗余代码。B类也是如此。classA 和 ClassB 之间的唯一区别是 classA 中的方法需要返回与 classB 中的方法不同的响应类型。

ExceptionMapper 似乎是避免冗余错误处理代码的好方法。剩下要做的就是确定异常来自哪里(ClassA 或 ClassB),执行一些通用错误处理并返回正确的响应类型。

我已经为此工作了代码,但我想知道是否有更优雅的方式来做到这一点。泽西岛还有很多我不熟悉的东西,所以我很有可能错过了一些东西。

代码相当简单,并使用 UriInfo 注入来识别异常的来源。

我的异常映射器:

MyResponseBuilder 类完成了所有的魔法。它分析 UriInfo 并返回正确的响应类型。

虽然它有效,但如果有多个匹配的资源在同一个 URI 上运行,它最终可能会导致一些令人讨厌的问题编辑:结果泽西规范不允许一个 @Path 拥有多个资源,所以这种情况应该'如果处理得当(即找到正确的资源),则不会发生。不过,我认为这不是一个令人满意的解决方案。

解决该问题的一种更优雅的方法是以某种方式将 NotFoundExceptionMapper_ThatReturnsResponseTypeA 直接关联到 ClassA,并将另一个 NotFoundExceptionMapper_ThatReturnsResponseTypeB 关联到 ClassB。不过,我还没有找到任何方法。

有办法吗?

0 投票
0 回答
1349 浏览

java - JAX-RS 异常处理和 ExceptionMapper

我已经实现了一些自定义异常,例如:NotFoundException、BadRequestException、

对于它们中的每一个,我都实现了自己的 ExceptionMapper,例如NotFoundExceptionMapper、BadRequestExceptionMapper以及类似GenericExceptionMapper的东西:

首先,这里的问题是GenericExceptionMapper不能像我预期的那样工作,它不会捕获 JAX-RS 抛出的通用异常,因为我认为这样的 Mapper 捕获的每个异常都必须尽早从 getResource() throws之类的方法中显式抛出一些异常{

此外,问题是在RestEasy中我需要在 web.xm 中注册异常映射。见下文:

这是另一个问题,因为我无法注册(或者我不知道如何注册)我定义的每个自定义 ExceptionMapper。我只能注册 SINGLE 自定义 ExceptionMapper。 如何全部注册?即NotFoundExceptionMapper、BadRequestExceptionMapper等。

所以现在每个异常只由通用异常映射器映射,这是第一个问题。

这是RESTEasy的限制吗?在泽西岛的一些教程中,我没有看到需要注册这样的异常映射器,但我也不知道是否可以有多个异常映射器。

我想到的另一个解决方案(解决方法)是使用单个 GenericExceptionMapper 并在toResponse(Throwable ex)方法中进行一些检查,例如:

谢谢帮助

0 投票
1 回答
218 浏览

java - 如何在通过 JAX-RS(Apache-CXF 实现)ExceptionMapper 准备的错误响应中保留请求标头

我正在使用 apache CXF 实现 JAX-RS。我创建了一个 ExceptionMapper 来处理这样的错误请求:

我不确定这在内部是如何工作的,但我认为如果用户发出无效请求,该框架会抛出异常,并且该处理程序将准备一条错误消息以发回。我的问题是我希望保留用户在请求中发送的一些自定义标头,以便我将其与响应一起发回。但是使用这个异常映射器,我看不到任何获取原始请求标头的选项。我可以在响应中设置任何新标头,但我希望保留请求标头- 就像我在正常请求中所做的那样。那么在 JAX-RS 中有什么方法可以保留或有效地引用当前请求中的自定义标头吗?

0 投票
3 回答
5476 浏览

java - Jersey ExceptionMapper 未被调用

我正在尝试调用此异常映射器以返回 404 not found 响应,但它一直返回 500 内部错误。泽西版本是 2.22.1。下面的代码片段。感谢所有帮助。

谢谢。

异常映射器类。

异常类。

包 org.learn.rest.messengerdemo.exception;

抛出的服务类的方法。

和资源类。

0 投票
1 回答
3426 浏览

java - ExceptionMapper 未按预期工作

我将球衣用于 REST Web 服务。

每当我没有从服务层获得任何对象时,我都会通过抛出 NotFoundException(Package com.sun.jersey.api) 来处理所有 404 响应。

例如

我已经为这个异常编写了 ExceptionMapper。

}

因此,当我将未知文件夹 ID 作为路径参数时,会引发异常,但不会调用 NotFoundExceptionMapper 中的代码。(我可以在响应中看到异常消息,但作为“纯文本”,即使在映射器中我以 JSON 格式返回响应;并且也没有命中调试断点)。

此外,当我在 URI 中输入不正确的资源名称时,将调用上述异常映射器,但对于不正确的路径参数则不会。

我还添加了如下异常映射器来响应所有其他异常。

每当抛出任何异常(映射异常除外)并且我得到正确的 JSON 响应时,都会调用上面的代码。

那么这里的 NotFoundException 有什么问题呢?我已经对此进行了谷歌搜索,并查看了 NotFoundException 的来源,但没有发现任何有用的信息,请指导我。

0 投票
0 回答
827 浏览

java - JAX-RS ExceptionMapper 不适用于除 java.lang.Exception 以外的任何异常

我正在使用弹簧靴以及 JAX-RS 和泽西岛。我为不同的类型定义ExceptionMappers了不同的类型,Exceptions其中一种ExceptionMapper作为Fallback映射器,只是为了正确记录异常并将正确的响应发送回客户端。在单元测试级别上,一切正常,ExceptionMapper并且Exception使用

然而,在正在运行的应用程序(嵌入在 Je​​tty 中)上,只有捕获 的 Fallback 映射器java.lang.Exception被调用,而所有其他映射器都被忽略。我正在对所有内容使用注释扫描,并且FallbackExceptionMapperandMyCustomExceptionMapper都在同一个包中并用@Provider. 知道为什么其他异常映射器MyCustomExceptionMapper不起作用吗?

更新:我将异常的类型从我的更改java.lang.ExceptionFallbackExceptionMapperMyCustomException这也没有被调用。似乎除了根异常(java.lang)之外没有其他异常被映射器捕获。

Update2:@Context javax.ws.rs.ext.Providers通过在我的 FallbackExceptionMapper 和方法中定义提供程序,providers.getExceptionMapper(MyCustomException.class)我确实看到它返回了 MyCustomExceptionMapper 的一个实例,但我想知道为什么 Jersey 不调用它!任何想法??

0 投票
1 回答
668 浏览

java - 如何将 CDI 拦截器优先于 JAX-RS ExceptionMapper

我有一个 REST Web 服务,它使用以下方法管理其事务:

我也在映射我的异常,如下所示:

问题是,当一个 RuntimeException 被抛出时(在事务启动之后),它会立即被RuntimeExceptionMapper拦截,并且事务永远不会回滚。

既然如此,我需要一种方法来优先考虑TransactionRequiredInterceptor ..

Obs:使用@Transactional 不是一个选项,因为我需要在Tomcat 8 上部署。

0 投票
0 回答
1298 浏览

java - 如何更改异常的招摇响应

我正在使用带有 swagger 的 spring boot 来提供 REST API 服务。发生异常时,swagger 以如下格式返回响应

我不想返回详细的响应,而是只显示消息。服务器也一直在抛出RuntimeException.

如何实现招摇只回消息。

0 投票
1 回答
253 浏览

java - 如何在 Jersey 的 MessageBodyWriter 中检索资源方法的注解?

球衣 2.21。

我有一个如下的资源文件

要将结果返回给客户端,我实现了一个自定义 MessageBodyWriter,如下所示

为了处理异常,我实现了一个 ExceptionMapper,如下所示:

现在,如果一切正常并且没有异常,代码执行路由器是userReg() -> MyRespWriter.writeTo(),参数“annotations”MyRespWriter.writeTo()包含方法的正确注解userReg(),例如POST, Path, Produces

但是如果userReg()抛出异常,代码执行路由器是userReg() -> MyExceptionMapper.toResponse() -> MyRespWriter.writeTo(),method的参数“annotations”MyRespWriter.writeTo()没有method的注解userReg()

我想知道,有什么方法MyRespWriter.writeTo()可以一直检索原始注释吗?