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

Jersey/JAX-RS ExceptionMapper MySQL

洪高扬
2023-03-14

我正在学习Jersey/JAX-RS,需要一些ExceptionMapper方面的帮助。

我有一个UserFacade类、AbstractFacade类和User类本身,它们都是非常标准的,主要是通过在NetBeans中创建一个新的Web服务RestFUL项目生成的。我的问题是,我想现在开始捕捉错误,比如“唯一约束违反”错误。我想我需要实现一个异常映射器...我的门面有以下内容:

    @Provider
    public class EntityNotFoundMapper implements ExceptionMapper {

        @Override
        public javax.ws.rs.core.Response toResponse(PersistenceException ex) {
            return Response.status(404).entity(ex.getMessage()).type("text/plain").build();
        }
    }

这是我得到的错误,它没有被我的自定义异常处理程序捕获。

WARNING:   StandardWrapperValve[service.ApplicationConfig]: Servlet.service() for servlet service.ApplicationConfig threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'usernamegoeshere' for key 'username'

共有1个答案

白昊东
2023-03-14

>

  • 始终参数化ExceptionMapper:

    public class EntityNotFoundMapper
        implements ExceptionMapper<PersistenceException> { ... }
    

    MySQLIntegrityConstraintViolationException似乎没有扩展PersistenceException。若要捕获mysqlintegrityConstraintViolationException,您需要直接为该类或其前身之一创建ExceptionMapper,例如:

    @Provider
    public class MySqlIntegrityMapper
        implements ExceptionMapper<MySQLIntegrityConstraintViolationException> {
    
        @Override
        public Response toResponse(MySQLIntegrityConstraintViolationException ex) {
            return ...;
        }
    }
    

    或者更通用的SQLException(因为MysqlintegrityConstraintViolationException继承自它):

    @Provider
    public class SqlExceptionMapper implements ExceptionMapper<SQLException> {
    
        @Override
        public Response toResponse(SQLException ex) {
            return ...;
        }
    }
    

  •  类似资料:
    • 我们可以通过 实现创建JAX-RS示例。 为此,需要加载 jersey相关jar文件或使用Maven框架。 在这个例子中,我们使用jersey jar文件来实现JAX-RS jersey示例。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 打开Eclipse,创建一个Web工程: restfuljersey,如下图所示 - JAX-

    • 我有一个基本的REST web服务可以工作,但我确实有一个问题。下面是一个简短的代码片段。

    • 问题内容: 在详尽搜索了Web和Stackoverflow之后,我仍然坚持尝试找出如何将Jersey所提供的RESTlet风格界面与Jetty相集成的方法。 我的Jetty服务器已经启动并正在运行,因此Jersey也很容易使用,有人知道如何将两者结合在一起吗?任何具体的链接都会有所帮助- 我对servlet编程也很陌生。 问题答案: 我前一段时间使用Jetty和Jersey创建了一个应用程序。它实

    • 问题内容: 我正在努力弄清Java中的一些概念: JSR:描述规格,但不包含实际的实现。例如,http://jsr311.java.net/是“ RESTful Web服务的Java™API”的“主页”。它用作JSR-311的所有实现的通用参考。 可以从http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api下载JSR-311的接口(?),但

    • 我有这个实体类 } 从数据库表生成。那么我有这个Rest服务 我(应该)使用jackson API来处理json,但我没有使用maven。因此,我在构建路径中添加了以下内容。罐: jackson-annotations-2.9.3。罐子 jackson-core-2.9.3。罐子 jackson-databind-2.9.3。罐子 jackson-jaxrs-base-2.9.3。罐子 jacks

    • 我试图在was 8.5上部署使用jersey的jax-rs客户机应用程序。 我希望我不需要在war中打包jersey JAR,因为was将提供它们。 但在试图调用servlet时,我遇到了这个错误: 我可以做些什么来使用was库,这样我就不需要把它们打包在我的应用程序中了吗?