当前位置: 首页 > 面试题库 >

在jersey中以编程方式注册实现Exceptionmapper的提供程序

那安宁
2023-03-14
问题内容

如何在实现由jersey
API提供的Exceptionmapper的jersey中以编程方式注册我的提供程序?我不想使用@Provider批注,而不想使用ResourceConfig注册提供程序,我该怎么做?

例如:

public class MyProvider implements ExceptionMapper<WebApplicationException> extends ResourceConfig {

     public MyProvider() {
        final Resource.Builder resourceBuilder = Resource.builder();
        resourceBuilder.path("helloworld");

        final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET");
        methodBuilder.produces(MediaType.TEXT_PLAIN_TYPE)
                .handledBy(new Inflector<ContainerRequestContext, String>() {

            @Override
            public String apply(ContainerRequestContext containerRequestContext) {
                return "Hello World!";
            }
        });

        final Resource resource = resourceBuilder.build();
        registerResources(resource);
    }

    @Override
    public Response toResponse(WebApplicationException ex) {
        String trace = Exceptions.getStackTraceAsString(ex);
        return Response.status(500).entity(trace).type("text/plain").build();
    }
}

这是正确的方法吗?


问题答案:

我猜您没有ResourceConfig,因为您似乎不确定如何使用它。首先,它不是必需的。如果您 确实
使用它,那应该是它自己的单独的类。您可以在那里注册映射器。

public class AppConfig extends ResourceConfig {
    public AppConfig() {
        register(new MyProvider());
    }
}

但是您可能正在使用web.xml。在这种情况下,您可以通过以下方式注册提供商<init-param>

<servlet>
    <servlet-name>MyApplication</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>
            org.foo.providers.MyProvider
        </param-value>
    </init-param>
</servlet>

看看应用程序部署和运行时环境在不同的部署模式的更多信息。有几种不同的方法来部署应用程序。您甚至可以混合和匹配(web.xml和ResourceConfig)。



 类似资料:
  • 如何在jersey中以编程方式注册我的提供者,jersey实现了jersey API提供的Exceptionmapper?我不想使用@Provider注释,而是想使用ResourceConfig注册提供者,我该怎么做? 例如: 这是正确的做法吗?

  • 有没有办法在不使用REST操作的情况下从Eureka服务器中删除注册实例?哪个是包含所有应用程序的数据结构? (很明显,我想删除他们在Eureka服务器中编写代码)。

  • 我正在尝试使用我自己的应用程序实现或扩展的ResourceConfig或PackageResourceConfig来配置我的Jersey应用程序。因此,我的第一次尝试是将现有的web.xml(实际上,由于开发的库性质,我使用的是web-fragment.xml)配置移植到MyApplication实现。 当我使用第二个版本时,我会收到以下信息 正如您所看到的,是第一个注册的类,但由于它不是公共的,

  • 我正在使用Pact Go实现来尝试合同测试。我做了一个不起作用的提供者测试,因为我需要模拟我的服务对Twilio的请求。 我已经为我的消费者和这个提供者之间的契约创建了一个Pact对象,然后为我的提供者和twilio之间的契约创建了另一个称为twilioPact的对象。我已经为Twilioendpoint添加了一个POST的交互,但是在pact.log中我没有看到它被注册。我的测试正确地发出了请求

  • 我们正在通过气流使用阿帕奇光束。默认的GCS帐户是用环境变量google_application_credentials设置的。我们不想改变环境变量,因为它可能会影响当时正在运行的其他进程。我找不到以编程方式更改谷歌云数据流服务帐户的方法。我们以以下方式创建管道:p=beam.pipeline(argv=self.conf)

  • 问题内容: 使OAuth提供程序以Java运行的最快/最简单方法是什么?具体来说,我需要授权第三方应用访问某些Web服务(我正在考虑使用OAuth进行令牌身份验证)。 我一直在寻找在新泽西州的OAuth扩展,但提到这里,它没有提供一个完整的服务供应商。 问题答案: 有一些Java库可用于OAuth。具体来说,我来看看这个。我自己没有使用过,但是有一个运行OAuth服务提供商的示例。 OAuth网站