我将项目中的Jersey升级到2.26版本。
我的代码是:
import org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory;
public class ClassA extends AbstractContainerRequestValueFactory<ClassB> {
@Override
public ClassB provide() {
.....
}
}
AbstractContainerRequestValueFactory类已被删除,我没有找到解决方法。
答案 0 :(得分:0)
来自https://github.com/jersey/jersey/commit/1f4614787c4cfddb5d9177c6c2a663b96ab673cc#diff-bcd9d3f0cfac8ea5e8e9a6b00119237b 提交我们可以看到我们应该使用下面的代码。
private static final class BeanParamValueProvider implements Function<ContainerRequest, Object> {
答案 1 :(得分:0)
或者,我们可以使用自定义 HK2 绑定,这些绑定被配置为 Jersey 应用程序的一部分。在类路径中添加 jersey-hk2 依赖项 org.glassfish.jersey.inject:jersey-hk2
定义工厂类以根据资源范围生成实例
import org.glassfish.hk2.api.Factory;
import javax.ws.rs.ext.Provider;
@Provider
public class ClassA implements Factory<ClassB> {
@Override
public ClassB provide() {
// construct ClassB instance based on your requirement
//here I am simply returning the object
return new ClassB();
}
@Override
public void dispose(ClassB instance) {/**Noop**/}
}
注册自定义工厂类
例如,我必须为每个请求注入 ClassB 实例,然后我可以在 RequestScoped
的范围内注册上述工厂,在这种情况下,对于每个请求,ClassA#provide
将被调用以创建可以作为 @Context ClassB classB
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.process.internal.RequestScoped;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ext.Provider;
@Provider
class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ClassA.class)
.to(ClassB.class)
.in(RequestScoped.class);
}
});
}
}