2014-01-06 22 views
2

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

我有一个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' 

我觉得我很近,我并不想从上面的例子赶上MySQLIntegrityConstraintViolationException的唯一原因,是因为我只是想抓住每一个可能的错误FIRST(以确保其工作),那么当我看到语法正在工作后,我会缩小范围并具体化。

我在做什么错?

回答

3
  1. 始终参数化ExceptionMapper

    public class EntityNotFoundMapper 
        implements ExceptionMapper<PersistenceException> { ... } 
    
  2. 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 ...; 
        } 
    } 
    
+0

你知道我在哪里可以找到如何做你的答案的第2部分的例子吗? – Trihedron

+0

查看编辑答案。 –

+0

迄今为止,非常感谢您的帮助,我觉得我快到了。警告:已检测到以下警告:警告:[service.UserFacadeREST $ SqlExceptionMapper]的HK2服务通知失败,但有一个例外: MultiException堆栈1 of 2 java.lang.NoSuchMethodException:无法实例化service.UserFacadeREST $ SqlExceptionMapper类。不支持非静态成员类的实例化。' – Trihedron

相关问题