Я пытаюсь создать настраиваемое связывание параметров http для моей службы. См. Пример ниже.
@POST
@Path("/user/{userId}/orders")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public MyResult foo(@PathParam("userId") String someString, @UserAuthHeaderParam String authString){
}
Вы можете видеть, что в сигнатуре функции есть аннотация UserAuthHeaderParam. То, что я хочу сделать, - это привязка к параметру http, отличная от стандартного javax.ws.rs. * Param.
Я попытался реализовать org.glassfish.hk2.api.InjectionResolver, которые в основном извлекают значение из заголовка http:
public class ProtoInjectionResolver implements InjectionResolver<UserAuthHeaderParam>{
...
@Override
public Object resolve(Injectee injectee, ServiceHandle< ? > root)
{
return "Hello World";
}
...
}
Когда я звоню в службу поддержки, сервер получает исключения. Это указывает на то, что структура не может разрешить параметр в сигнатуре функции:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=String,parent=MyResource,qualifiers={}),position=0,optional=false,self=false,unqualified=null,2136594195),
java.lang.IllegalArgumentException: While attempting to resolve the dependencies of rs.server.MyResource errors were found
Пожалуйста, помогите. Любые рекомендации приветствуются. Я делаю много поиска в google, но не могу заставить его работать. Джерси 2. *. Как заменить InjectableProvider и AbstractHttpContextInjectable of Jersey 1. * может быть похожий вопрос.
- ОБНОВЛЕНИЯ: Я использую AbstractBinder для привязки своего резольвера к UserAuthHeaderParam:
public class MyApplication extends ResourceConfig
{
public MyApplication()
{
register(new AbstractBinder()
{
@Override
protected void configure()
{
// bindFactory(UrlStringFactory.class).to(String.class);
bind(UrlStringInjectResolver.class).to(new TypeLiteral<InjectionResolver<UrlInject>>()
{
}).in(Singleton.class);
}
});
packages("rs");
}
}
Спасибо!