我正在尝试为我的RESTful服务创建自定义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注释。我的目的是除了标准的javax.ws.rs.*Param之外,拥有自定义的http参数绑定。
我尝试实现org.glassfish.hk2.api.InjectionResolver,它基本上从http头中提取值:
public class ProtoInjectionResolver implements InjectionResolver<UserAuthHeaderParam>{
...
@Override
public Object resolve(Injectee injectee, ServiceHandle< ? > root)
{
return "Hello World";
}
...
}
当我调用RESTful服务时,服务器出现以下异常。这表明框架无法解析函数签名中的参数:
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
请帮忙。感谢任何建议。我在谷歌上进行了大量搜索,但无法使其正常工作。Jersey 2.*. 如何替换Jersey 1.*的InjectableProvider和AbstractHttpContextInjectable可能是类似的问题。
--更新: 我使用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");
}
}
谢谢!
@HeaderParam
并通过 HTTP 标头将 UserAuth 值传递到你的 REST API 中? - herau