我需要一些帮助来理解Websphere Liberty(18.0.0.1)如何处理JAX-RS端点调用中抛出的异常.我正在使用Liberty功能jaxrs-2.0,因此应该由WLP提供实现.
现在,我的应用程序有一个POST HTTP端点接受JSON有效负载,我想为所有可能的错误客户端输入提供自定义错误消息.
这是一个以我预期的方式工作的案例:
application/xml而不是application/jsonClientErrorException由容器抛出ExceptionMapper<WebApplicationException>处理此异常(实际上是为了处理所有Web应用程序异常,我很好)以下是不适合我的情况:
application/json,但空体java.io.EOFException: No content to map to Object due to end of input- 是的,这看起来很准确EOFException成某种WebApplicationException(我可以轻松处理),WLP将异常问题包装成JaxRsRuntimeException这里有几点:
ExceptionMapper<JaxRsRuntimeException>因为该异常不是JAX-RS 2.0规范的一部分,我必须提供导入到JaxRsRuntimeException并将应用程序与一些Liberty特定的库连接起来.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)