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

球衣2. *。如何替换Jersey 1. *的InjectableProvider和AbstractHttpContextInjectable

夏昊
2023-03-14
问题内容

我想创建一个类,该类的对象可以使用@Context注释(或者在需要将参数传递给注释的情况下使用自定义注释)注入资源方法中。在泽西岛1.
*中,我会使用InjectableProvider(在我的情况下,与一起使用AbstractHttpContextInjectable)。我想要实现的是来自
dropwizard的@Auth [
1 ] (使用Jersey 1.7)。 __

据我所知,Jersey的注入功能已被HK2取代,我找不到我所描述的任何示例。


问题答案:

您需要从HK2 实现InjectionResolver 接口。看一下Jersey工作区中存在的现有实现:

  • ContextInjectionResolver处理@Context
  • ParamInjectionResolver处理@PathParam、、@QueryParam…(通过其子类)
  • AutowiredInjectResolver处理@Autowired

一旦有了这个,您需要从HK2
扩展AbstractBinder并InjectionResolver通过它的#configure()方法绑定您:

public class MyResolverBinder extends AbstractBinder {

    @Override
    protected void configure() {
        bind(MyInjectionResolver.class)
                .to(new TypeLiteral<InjectionResolver<MyAnnotation>>() {})
                .in(Singleton.class);
    }
}

…并在您的应用程序类中(或通过feature)注册此绑定器的实例:

Feature

public class MyFeature implements Feature {

    @Override
    public boolean configure(final FeatureContext context) {
        context.register(new MyResolverBinder());
        return true;
    }
}

注册MyFeatureApplication

public class JaxRsApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        final HashSet<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(MyFeature.class);
        // Register other providers or resources.
        return classes;
    }
}

注册MyResolverBinderFeatureResourceConfig

new ResourceConfig()
        // Register either MyFeature
        .register(MyFeature.class)
        // or MyResolverBinder
        .register(new MyResolverBinder())
        // Register other providers or resources
        .packages("my.package");


 类似资料:
  • 问题内容: 我目前正在尝试使用Jersey 创建一个,但无法让Jersey接它。 除了在实现中使用批注之外,我找不到任何实际用法示例,甚至找不到如何使用它。看似写在泽西岛上的人在某些帖子中暗示这足以使它被拾起。 我需要指定一些SPI服务文件,还是将其添加到某个工厂的某个地方? 注意:我正在Glassfish 3.1中运行,并使用Spring 3.1。Spring可能会以某种方式接管s 的自动加载似

  • 我使用Jersey 2.10异常映射器类来处理异常。我想返回错误状态和错误信息的JSON正文。我想得到类似的回应: Jersey没有在响应中发送JSON正文。我得到的是: 如果我将状态代码更改为200,那么我将获得预期的响应正文 请帮我找出这个问题的解决方案。 异常映射器在错误对象中填充错误消息和状态。以下是异常映射程序代码: 这是来自错误对象的代码:

  • 我有一个运行spring-boot、jersey2和spring度量的应用程序:下面是maven片段: 在引入致动器依赖性之前,Jersey一直工作得很好。然后创建了以下bean以使Jersey作为过滤器工作: 度量被映射到/admin路径。使用这种配置,我无法使度量标准工作。但是,通过添加management.port(不同于主应用程序端口),既可以使用Jersey资源,也可以使用metrics

  • 问题内容: 我想使用Jersey来实现一些Java REST服务。默认的POJO转换器JAXB处理JSON对象有点奇怪,因此我想使用Jackson转换POJO的开销很少或更少。我如何告诉J2ME框架使用另一个转换器? 我的web.xml看起来像这样: 问题答案: 只需添加jackson JAR并修改web.xml即可,如下所示: 所需的Jackson Jackson JAR(http://jack

  • 我使用的是Jersey 1.12,并且有一个endpoint可能接收也可能不接收来自我无法控制的客户端的格式错误的标头(例如)。显然,bla格式错误,因为规范要求参数也要有值,即 我可以按照这里、这里和这里的建议编写一个过滤器来解决这个问题,但我想知道是否有一种方法可以让Jersey在我对其值不感兴趣的情况下忽略所有格式错误的报头?

  • 我有一个服务器Weblogic 12.1.3,带有JAX-RS 2。x作为共享库安装(参见。https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297). 该共享库包括例如javax。ws。rs-api-2.0。jar和jersey-media-multipart-2.5.1。jar。 请注意,我不确