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

如何将 Jersey ExceptionMapper 与 Google Guice 配合使用?

宰父桐
2023-03-14

我正在使用Jersey Guice,需要配置一个自定义的< code>ExceptionMapper

我的模块看起来像这样:

public final class MyJerseyModule extends JerseyServletModule
{
   @Override
   protected void configureServlets()
   {
      ...
      filter("/*").through(GuiceContainer.class);
      ...
   }
}

这是我的异常映射器

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;

public class MyExceptionMapper implements ExceptionMapper<MyException>
{
   @Override
   public Response toResponse(final MyException exception)
   {
      return Response.status(Status.NOT_FOUND).entity(exception.getMessage()).build();
   }
}

共有1个答案

葛永丰
2023-03-14

您的ExceptionMapper必须用< code>@Provider进行注释,并且是单例的。

import com.google.inject.Singleton;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
@Singleton
public class MyExceptionMapper implements ExceptionMapper<MyException>
{
   @Override
   public Response toResponse(final MyException exception)
   {
      return Response.status(Status.NOT_FOUND).entity(exception.getMessage()).build();
   }
}

然后,只需将< code>ExceptionMapper绑定到您的< code>JerseyServletModule所在的同一个< code>Injector中的一个Guice模块中,Jersey Guice就会自动找到它。

import com.google.inject.AbstractModule;

public class MyModule extends AbstractModule
{
   @Override
   protected void configure()
   {
      ...
      bind(MyExceptionMapper.class);
      ...
   }
}

如果您愿意,您也可以直接将其绑定在JerseyServletModule中:

public final class MyJerseyModule extends JerseyServletModule
{
   @Override
   protected void configureServlets()
   {
      ...
      filter("/*").through(GuiceContainer.class);
      bind(MyExceptionMapper.class);
      ...
   }
}
 类似资料:
  • 我无法将Tosca扩展用于Chrome。当我安装扩展并尝试使用Tosca运行扫描时,它会显示以下消息 当我按下Yes(是)按钮时,它显示以下错误 无法解决此问题。此外,扩展从浏览器中消失,我不得不再次安装它。 谢啦

  • 问题内容: 我最近安装了隐私vpn,事实证明启用的openvpn会破坏docker。 当我尝试运行时,出现以下错误 禁用vpn可以解决此问题(但是我宁愿不禁用它)。有什么办法可以使这两者和平共处?我使用debian jessie,并且我的openvpn具有以下版本字符串 很多人通过禁用openvpn来“解决”此问题,因此我专门询问如何使这两个工具同时工作。 如果这有什么不同,我的vpn提供程序是:

  • 有没有示例代码演示如何在Jersey 2.0中使用guice-servlet?

  • 我一直在使用minikube在本地测试库伯内特斯,在minikube中,我们可以通过使用命令来使用本地docker镜像。 我开始探索微型k8。在运行Ubuntu 18的机器上使用快照安装microk8。 除了创建本地 docker 注册表之外,有没有办法将本地 docker 映像与 microk8s 一起使用,就像我们使用 minikube 进行测试和开发一样? 命令也不工作,它显示: 命令‘mi

  • 我正在尝试使JavaFX与VSCODE一起使用,但是遇到了此错误; 我安装了最新的 java“openjdk 17.0.1 2021-10-19”,并且使用的是最新的 javaFx17.0.1。我添加了所有引用库并添加了 vmArgs 路径文件。 我使用的是基本型号macbookpro m1。 这是我的vmArgs路径: 这是javafx lib文件夹中的内容:

  • 问题内容: 我正在尝试开发一个JMS 独立应用程序 来读写MQSeries上的Queue。我的老板要求我使用 纯Java JMS (而不是ibm.mq lib)来执行此操作。 这是建立jms连接所需的信息: 您知道该怎么做?还是您有任何链接教我做到这一点。 问题答案: 这里的问题是“我的老板要求我使用纯Java JMS(不是ibm.mq lib)来做到这一点”的要求。JMS是一个规范,每个实现都必