Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JAX-RS中调用自定义ExceptionMapper_Java_Jax Rs - Fatal编程技术网

Java 在JAX-RS中调用自定义ExceptionMapper

Java 在JAX-RS中调用自定义ExceptionMapper,java,jax-rs,Java,Jax Rs,我创建了一个自定义的ExceptionMapper,每当API中出现异常时,我都想调用它,将其映射到合适的响应。以下是我的自定义异常类: @Provider public class ServiceExceptionMapper implements ExceptionMapper<Throwable> { private Logger logging = LoggerFactory.getLogger(getClass()); @Override public Res

我创建了一个自定义的
ExceptionMapper
,每当API中出现异常时,我都想调用它,将其映射到合适的响应。以下是我的自定义异常类:

@Provider
public class ServiceExceptionMapper implements ExceptionMapper<Throwable> {
  private Logger logging = LoggerFactory.getLogger(getClass());

  @Override
  public Response toResponse(Throwable throwable) {
    log.error("There is an exception: ", throwable);


    if (throwable instanceof IllegalArgumentException) {
      return Response.status(Response.Status.BAD_REQUEST).entity(throwable.getMessage()).type    (MediaType.TEXT_PLAIN).build();
    }

    if (throwable instanceof WebApplicationException) {
      WebApplicationException we = (WebApplicationException) throwable;
      return we.getResponse();
    }
    return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(throwable.getMessage()).type(MediaType.TEXT_PLAIN).build();
   }
}
我尝试以下列方式调用异常映射器类:

catch (Exception e) {
    exceptionMapper.toResponse(e);
}
其中,
exceptionMapper
是类
ServiceExceptionMapper
的字段

ExceptionMapper
s的作用是什么? 但是我如何调用自定义异常映射器类来抛出相同的异常呢

我希望自定义异常映射器类负责抛出API中发生的异常。因此,我不想直接抛出异常(我的第二个代码段),而是想调用异常映射器类并希望它抛出该异常

and背后的想法是映射一个已被抛出的对象。检查方法签名,您将看到它接收到扩展的内容,并且必须返回一个。这种方法由JAX-RS运行时调用

如果出于任何原因,您不想在资源方法代码中直接抛出异常,则可以考虑创建实用类来执行它,然后可以调用其方法来实例化和抛出异常。然后,将把抛出的异常映射到HTTP响应

使用JAX-RS查找提供者 如果需要对提供程序实例执行运行时查找,可以使用可注入接口。使用注释将其注入资源类:

@Context
私人供应商;
然后,您可以为特定的异常类获取:

ExceptionMapper ExceptionMapper=providers.getExceptionMapper(Throwable.class);

注1:有关可与注释一起注入的其他类型,请参阅此

注意2:该界面允许您查找以下提供程序:

什么是
例外标记
s? 但是我如何调用自定义异常映射器类来抛出相同的异常呢

我希望自定义异常映射器类负责抛出API中发生的异常。因此,我不想直接抛出异常(我的第二个代码段),而是想调用异常映射器类并希望它抛出该异常

and背后的想法是映射一个已被抛出的对象。检查方法签名,您将看到它接收到扩展的内容,并且必须返回一个。这种方法由JAX-RS运行时调用

如果出于任何原因,您不想在资源方法代码中直接抛出异常,则可以考虑创建实用类来执行它,然后可以调用其方法来实例化和抛出异常。然后,将把抛出的异常映射到HTTP响应

使用JAX-RS查找提供者 如果需要对提供程序实例执行运行时查找,可以使用可注入接口。使用注释将其注入资源类:

@Context
私人供应商;
然后,您可以为特定的异常类获取:

ExceptionMapper ExceptionMapper=providers.getExceptionMapper(Throwable.class);

注1:有关可与注释一起注入的其他类型,请参阅此

注意2:该界面允许您查找以下提供程序:


请澄清如何调用自定义异常映射器类来抛出相同的异常?@CássioMazzochiMolin,我希望自定义异常映射器类负责抛出API中发生的异常。因此,我不想直接抛出异常(我的第二个代码片段),而是想调用异常映射器类并希望它抛出该异常请澄清我如何调用自定义异常映射器类来抛出相同的异常?@CássioMazzochiMolin,我希望自定义异常映射器类负责抛出API中发生的异常。因此,我不想直接抛出一个异常(我的第二个代码片段),而是想调用异常映射器类,并希望它抛出该异常谢谢您的澄清。我已经更新了问题,请看一下,如果我错了,请告诉我。再次感谢!没有任何其他编程方式来获取“提供者”吗?我有h2k spring桥,我需要从spring获得“提供者”class@GiulioPulina我不知道其他标准的方法来实现它。谢谢你的澄清。我已经更新了问题,请看一下,如果我错了,请告诉我。再次感谢!没有其他的编程方法来获取“提供者”?我有h2k spring桥,我需要从spring获得“提供者”class@GiulioPulina我不知道其他标准的方法来实现它。
catch (Exception e) {
    exceptionMapper.toResponse(e);
}