在我的应用程序中,我需要根据用户输入获得不同的实现。
到目前为止,我所做的只是通过在启动时使用ApplicationConfig
和ApplicationBinder
绑定到实现的接口注入服务:
@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends ResourceConfig
{
public ApplicationConfig()
{
super();
packages(true, "my.package");
register(new ApplicationBinder());
register(....);
....
}
}
public class ApplicationBinder extends AbstractBinder
{
@Override
protected void configure()
{
bind(ServletTemplateLoader.class).to(TemplateLoader.class);
bindAsContract(JobsImpl.class);
bindAsContract(JobInputAppender.class);
bindAsContract(ParamNameMapper.class);
bind(RedisJobRepository.class).to(JobRepositoryInterface.class);
....
}
然而,现在我需要根据用户输入动态获取一个实现。有25种不同的实现都使用相同的接口。
这意味着,我不能再简单地使用bind.to
方法。相反,我认为我需要用bindascontract
单独注册它们。
public interface MyInterface {}
public class Type1Impl implements MyInterface {} // registered with `bindAsContract`
public MyInterface getImplementation(final String type_)
{
switch (type_) {
case "type1":
return // what to do here to get "my.package.Type1Impl" instance?
case "type":
....
}
}
我需要来自HK2的实例,因为Impl也使用注入的服务,所以我不能简单地创建一个新的实例。
我认为使用IterableProvider有一个更好的答案。基本上,您可以在您的一个服务中做到这一点:
public class ImplementationGetter {
@Inject
private IterableProvider<MyInterface> interfaceProvider;
public MyInterface getImplementation(final String type_) {
return interfaceProvider.named(type_).get();
}
}
希望这有帮助!
注释如何在Jersey中工作,以便对特定的资源方法或资源类应用筛选器? 请考虑以下注释: 它是如何工作的?
我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?
我对web服务非常陌生。我已经公开了一些使用与Spring集成的Jersey 2的REST服务。现在我需要使用用户名/密码身份验证来保护那些rest服务。我被告知不要使用Spring Security。 我不知道该怎么做。我确实在网上搜索了一下,但是各种链接显示了不同的实现方式,我无法决定如何进行。
问题内容: 我是Web服务的新手,因此我从基本示例开始。这与文件上传有关。我正在为非Maven开发人员使用最新(2.17)版本的Jersey捆绑包。它指出: 捆绑包包含JAX-RS 2.0 API jar,所有核心Jersey模块jar以及所有必需的3rd-party依赖关系 。问题是我无法编译此部分: 尽管文档说确实存在,但似乎在Jersey 2.17软件包中并不存在。2.17捆绑包是否不完整?
我需要在Jersey ServletContainer中热部署和取消部署资源。 如果我看一下源代码: 从WebComponent构造函数引发ModelValidationException。之后,任何重新加载的调用都会导致onShutdown方法发生异常,这是由ServiceLocatorImpl的preDestroy方法中的checkState引起的。 我可以通过忽略验证错误来避免异常
问题内容: 我使用Jersey 1.11做了一个小型Rest Web服务。当我调用返回Json的url时,非英文字符的字符编码存在问题。Xml的相应网址(“ test.xml”在开始的xml-tag中使其成为utf-8。 如何使网址“ test.json”返回utf-8编码的响应? 这是该服务的代码: 这是服务使用的pojo: 问题答案: Jersey在默认情况下应始终生成utf-8,听起来像是您