java - JAX-RS 中的异常处理

标签 java spring exception jaxb jax-rs

java 8, Spring ,休息

我试图捕获来自异常映射器的响应,并在引发异常的调用者中对其执行某些操作。谢谢。

@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
  }
}

最佳答案

我不确定ExceptionMapper是否按照您认为的方式工作。

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

ExceptionMapper 不会作为端点代码的一部分被调用,并且您将无法根据其结果Response 采取操作,因为它没有'还没有被叫到。您只需将异常从端点中抛出即可。

关于java - JAX-RS 中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59939556/

相关文章:

java - 与接口(interface)和抽象类相关的对象数组

jsoup - 将行追加到 HTML 文件

Java 泛型,将 T 方法作为 T 而不是其父类(super class)调用

spring - Spring 启动:发布Thymeleaf模板而无需重新启动服务器

java - 在客户端服务器应用程序中动态选择连接端口

java - 如何使用 Spring 运行数据库单元测试 - 无法加载 ApplicationContext

java - AsyncHttpResponseHandler 未定义发送参数;RequestParams、android、java、php

java - 在测试之间共享 springcontext

Spring Boot 2.0.3 缺少 Spring Security oauth2 'dependencies.dependency.version'

c++ - 在 C++ 中将类变量传递给异常