首页 > 解决方案 > JAX-RS 中的异常处理

问题描述

java 8,春天,休息

我正在尝试捕获来自异常映射器的响应,并在引发异常的调用者中对其进行处理。谢谢。

@Provider
public class CustomerExceptionHandler implements ExceptionMapper<CustomerException> 
{
    @Override
    public Response toResponse(CustomerException exception) 
    {
        return Response.status(Status.BAD_REQUEST).entity(CustomerException.getMessage()).build();  
    }
}


public class CustomerException extends Exception implements Serializable
{
    private static final long serialVersionUID = 1L;

    public CustomerException() {
        super();
    }
    public CustomerException(String msg)   {
        super(msg);
    }
    public CustomerException(String msg, Exception e)  {
        super(msg, e);
    }
}



public class ExceptionDemo{

  public void getExceptionResponse(){
      //do something 
      throw new CustomerException("Something is wrong");// CustomerExceptionHandler is going to return me a Response, how can I capture the response here?
      //capture response and do something with it
  }
}

标签: javaspringexceptionjaxbjax-rs

解决方案


我不确定ExceptionMapper他们的工作方式是否像你认为的那样。

当端点中的某些代码抛出异常,并且该异常一直渗透出端点并返回到容器本身(在本例中为 Spring)时,查询已注册ExceptionMapper的 s 以查看它们是否与抛出的异常匹配,并且调用相关的 onepublic Response toResponse(T e) {}方法将其转换为Response.

不会作为端点代码的ExceptionMapper一部分被调用,并且您将无法根据其结果采取行动,Response因为它尚未被调用。您只需要将throw异常排除在端点之外。


推荐阅读