小编alu*_*kes的帖子

Websphere Liberty上的JAX-RS异常处理

我需要一些帮助来理解Websphere Liberty(18.0.0.1)如何处理JAX-RS端点调用中抛出的异常.我正在使用Liberty功能jaxrs-2.0,因此应该由WLP提供实现.

现在,我的应用程序有一个POST HTTP端点接受JSON有效负载,我想为所有可能的错误客户端输入提供自定义错误消息.

这是一个以我预期的方式工作的案例:

  1. 客户端发送application/xml而不是application/json
  2. 有一个ClientErrorException由容器抛出
  3. 我可以使用自己的异常映射器(实现ExceptionMapper<WebApplicationException>处理此异常(实际上是为了处理所有Web应用程序异常,我很好)
  4. 这样我就可以格式化错误消息,用ID标记错误,无论需要什么.非常好

以下是不适合我的情况:

  1. 客户端发送application/json,但空体
  2. 在这种情况下的核心例外是java.io.EOFException: No content to map to Object due to end of input- 是的,这看起来很准确
  3. 现在我无法弄清楚 - 而不是将其包装EOFException成某种WebApplicationException(我可以轻松处理),WLP将异常问题包装成JaxRsRuntimeException

这里有几点:

  • 我不想创建一个mapper实现,ExceptionMapper<JaxRsRuntimeException>因为该异常不是JAX-RS 2.0规范的一部分,我必须提供导入到JaxRsRuntimeException并将应用程序与一些Liberty特定的库连接起来.
  • 一个可能的解决方案是让mapper实现泛型ExceptionMapper<RuntimeException>和字符串检查,如果它找到classname'JaxRsRuntimeException'的异常,然后处理它.但这对我来说似乎并不合适.

那么,WLP设计是不是在这种情况下不给我一个WebApplicationException?处理这种情况的优雅解决方案是什么?

谢谢


编辑:添加了部分源代码.

REST端点和资源方法:

@Path("/books")
public class BookEndpoint {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createBook(Book book, @Context UriInfo uriInfo) {
        bookDao.create(book);
        UriBuilder builder = uriInfo.getAbsolutePathBuilder();
        builder.path(Integer.toString(book.getId()));
        return Response.created(builder.build()).entity(book).build(); …
Run Code Online (Sandbox Code Playgroud)

java jax-rs websphere-liberty open-liberty

6
推荐指数
1
解决办法
636
查看次数

标签 统计

java ×1

jax-rs ×1

open-liberty ×1

websphere-liberty ×1