java jersey 参数_java – jersey 2:如何创建自定义的HTTP参数绑定

如果您想要的是将值直接从头部传递给您不需要创建自定义注释的方法。假设你有一个头授权,那么你可以很容易地通过声明你的方法来访问它:

@GET

public String authFromHeader(@HeaderParam("Authorization") String authorization) {

return "Header Value: " + authorization + "\n";

}

你可以通过调用卷曲来测试它。

$ curl --header "Authorization: 1234" http://localhost:8080/rest/resource

Header Value: 1234

鉴于您的问题的答案,如何创建自定义绑定如下。

首先你必须这样声明你的注释:

@java.lang.annotation.Target(PARAMETER)

@java.lang.annotation.Retention(RUNTIME)

@java.lang.annotation.Documented

public @interface UserAuthHeaderParam {

}

注释声明你必须定义如何解决它。声明价值出厂提供商(这是您可以访问标题参数的地方 – 请参阅我的评论):

@Singleton

public class UserAuthHeaderParamValueFactoryProvider extends AbstractValueFactoryProvider {

@Inject

protected UserAuthHeaderParamValueFactoryProvider(MultivaluedParameterExtractorProvider mpep, ServiceLocator locator) {

super(mpep, locator, Parameter.Source.UNKNOWN);

}

@Override

protected Factory> createValueFactory(Parameter parameter) {

Class> classType = parameter.getRawType();

if (classType == null || (!classType.equals(String.class))) {

return null;

}

return new AbstractHttpContextValueFactory() {

@Override

protected String get(HttpContext httpContext) {

// you can get the header value here

return "testString";

}

};

}

}

现在声明一个注射解析器

public class UserAuthHeaderParamResolver extends ParamInjectionResolver {

public UserAuthHeaderParamResolver() {

super(UserAuthHeaderParamValueFactoryProvider.class);

}

}

和一个Binder进行配置

public class HeaderParamResolverBinder extends AbstractBinder {

@Override

protected void configure() {

bind(UserAuthHeaderParamValueFactoryProvider.class)

.to(ValueFactoryProvider.class)

.in(Singleton.class);

bind(UserAuthHeaderParamResolver.class)

.to(new TypeLiteral>() {})

.in(Singleton.class);

}

}

现在最后一件事,在您的ResourceConfig中添加注册表(新的HeaderParamResolverBinder()),就像这样

@ApplicationPath("rest")

public class MyApplication extends ResourceConfig {

public MyApplication() {

register(new HeaderParamResolverBinder());

packages("your.packages");

}

}

鉴于此,您应该可以根据需要使用该值:

@GET

public String getResult(@UserAuthHeaderParam String param) {

return "RESULT: " + param;

}

我希望这有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值