Java EE-如何在具有自定义注释的方法上注入方法参数

彼得·德沃夏克(Petr Dvorak)

假设我在Java EE / EJB / JAX-RS中有以下代码:

@POST
@Path("some/path")
@MyAnnotation
public MyResponse createActivation(MyRequest request, CustomValue value) {
   // ...
}

如果存在@MyAnnotation注释,如何检查自定义注释的存在CustomValue value基于一些请求上下文参数填充方法参数?

注意:我已经在Spring中使用HandlerInterceptorAdapter编写了此代码HandlerMethodArgumentResolver现在,我需要在没有Spring的情况下执行相同的操作。我已经发现了,ContainerRequestFilter并用它来检查注解,但是现在我正在努力注入方法参数。

保罗·萨姆索塔

自定义方法参数注入的处理方式与常规(即字段,构造函数)注入方式略有不同。对于Jersey,这需要实现ValueFactoryProvider对于您的情况,它看起来像

public class MyAnnotationParamValueProvider implements ValueFactoryProvider {

    @Inject
    private ServiceLocator locator;

    @Override
    public Factory<?> getValueFactory(Parameter parameter) {
        if (parameter.getAnnotation(MyAnnotation.class) != null
                && parameter.getRawType() == CustomValue.class) {
            final Factory<CustomValue> factory
                    = new AbstractContainerRequestValueFactory<CustomValue>() {
                @Override
                public CustomValue provide() {
                    final ContainerRequest request = getContainerRequest();
                    final String value = request.getHeaderString("X-Value");
                    return new CustomValue(value);
                }
            };
            locator.inject(factory);
            return factory;
        }
        return null;
    }

    @Override
    public PriorityType getPriority() {
        return Priority.NORMAL;
    }
}

然后,您需要向 ResourceConfig

public class AppConfig extends ResourceConfig {
    public AppConfig() {
         register(new AbstractBinder() {
              @Override
              protected void configure() {
                  bind(MyAnnotationParamValueProvider.class)
                       .to(ValueFactoryProvider.class)
                       .in(Singleton.class);
              }
         });
    }
}

此要点中查看完整的示例

也可以看看:

  • 使用Jersey的自定义方法参数注入它显示了执行此操作的另一种方法,您无需显式注入,而且还可以在所有三个区域(字段,构造函数和方法参数)中注入值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java EE中的依赖注入

来自分类Dev

如何在Java EE中注入外部定义的类

来自分类Dev

如何创建自定义Java注释以记录方法参数

来自分类Dev

如何创建自定义Java注释以记录方法参数

来自分类Dev

Java EE方法用自定义字符串替换美元符号($)变量

来自分类Dev

Java EE方法用自定义字符串替换美元符号($)变量

来自分类Dev

有关Java / Java EE的信息

来自分类Dev

Java EE RESTful服务字段注入

来自分类Dev

Java EE UriInfo:追加查询参数

来自分类Dev

在VM上查找Java EE文件

来自分类Dev

有哪些可用的Java EE Websockets实现?

来自分类Dev

所有Java EE规范的摘要

来自分类Dev

如何测试Java EE7 Websocket

来自分类Dev

Java EE outputText及其方法和参数,位于dataTable内部

来自分类Dev

如何在IntelliJ上模拟Netbeans的默认Java EE环境?

来自分类Dev

如何在IntelliJ上模拟Netbeans的默认Java EE环境?

来自分类Dev

如何在CentOS上运行Java EE应用程序

来自分类Dev

如何在Java项目中使用Java EE API?

来自分类Dev

非Java EE 5 servlet和Java EE 5 servlet容器之间有什么区别?

来自分类Dev

非Java EE 5 servlet和Java EE 5 servlet容器之间有什么区别?

来自分类Dev

带有接口的Java EE bean未创建用于注入

来自分类Dev

Java EE 7:如何将EJB注入WebSocket ServerEndpoint?

来自分类Dev

Java EE中的CDI-无法注入哪些Java类?

来自分类Dev

Java EE和J2EE有什么区别?

来自分类Dev

如何协调J2EE和Java EE数据库访问?

来自分类Dev

Maven - 如何仅在 Java EE 项目上重建 .xml 文件

来自分类Dev

NetBeans EE包括Java EE吗?

来自分类Dev

如何在本地部署OpenShift Java EE应用程序?

来自分类Dev

如何在Java EE和春季启动热重装属性?

Related 相关文章

热门标签

归档