在嵌入式Jersey中,我可以注册一个Binder
来放入一些我最终可以使用@Context
但是,我放入的内容更全局,而不是按请求级别。我知道我可以使用一些属性映射来完成它,但我宁愿通过类@Context
Response foo(@Context HttpServletRequest)
来完成它
我尝试了setRequestScopedInitializer()
但它没有按预期放入它们并且跟随Ref
的示例给我一个空指针异常
有没有办法做到这一点?
答案 0 :(得分:1)
这是我最终如何做到的,但我不喜欢我使用了命名属性
RoutingContext
是我想要注入的类型
public class RoutingContextFactory implements
Supplier<RoutingContext> {
@Inject
private ContainerRequest request;
@Override
public RoutingContext get() {
return (RoutingContext) request.getProperty(RoutingContext.class.getName());
}
}
我的活页夹
public class MyBinder extends AbstractBinder {
@Override
protected void configure() {
bindFactory(RoutingContextFactory.class)
.to(RoutingContext.class)
.proxy(true)
.proxyForSameScope(false)
.in(RequestScoped.class);
}
}
由
初始化 final ResourceConfig resourceConfig = ResourceConfig.forApplicationClass(applicationClass);
resourceConfig.register(new MyBinder());
由
加载 final ContainerRequest request = new ContainerRequest(...
request.setProperty(RoutingContext.class.getName(), routingContext);
由
使用@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello(
@Context final RoutingContext routingContext) {
return "Hello"
+ routingContext;
}
我仍然希望有一种方法让我去request.register(routingContext)
。我为此打开了https://github.com/jersey/jersey/issues/3682。