自定義方法參數注入處理與正常(即字段,構造函數)注入有點不同。有了澤西島,這需要執行ValueFactoryProvider
。對於你的情況下,它會看起來像
public class MyAnnotationParamValueProvider implements ValueFactoryProvider {
@Inject
private ServiceLocator locator;
@Override
public Factory<?> getValueFactory(Parameter parameter) {
if (parameter.getAnnotation(MyAnnotation.class) != null
&& parameter.getRawType() == CustomValue.class) {
final Factory<CustomValue> factory
= new AbstractContainerRequestValueFactory<CustomValue>() {
@Override
public CustomValue provide() {
final ContainerRequest request = getContainerRequest();
final String value = request.getHeaderString("X-Value");
return new CustomValue(value);
}
};
locator.inject(factory);
return factory;
}
return null;
}
@Override
public PriorityType getPriority() {
return Priority.NORMAL;
}
}
然後,你需要用ResourceConfig
public class AppConfig extends ResourceConfig {
public AppConfig() {
register(new AbstractBinder() {
@Override
protected void configure() {
bind(MyAnnotationParamValueProvider.class)
.to(ValueFactoryProvider.class)
.in(Singleton.class);
}
});
}
}
註冊它見this Gist
還看到一個完整的例子:
謝謝你的回答! :)有沒有辦法做到這一點沒有ResourceConfig類,例如使用註釋?我必須與Swift一起工作的管理員讓我柔軟......:D –
所以你使用的是web.xml(和包掃描)?如果是這樣,看看[這篇文章](http://stackoverflow.com/a/29275727/2587435) –
不,沒有web.xml ...和沒有包掃描。但基於[這篇文章](http://blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/),我相信包掃描可以在代碼中配置以及 - 我會給它一個鏡頭。 :) 謝謝! –