io.dropwizard.vavr.jersey.CollectionParamBinder Maven / Gradle / Ivy
package io.dropwizard.vavr.jersey;
import org.glassfish.hk2.api.InjectionResolver;
import org.glassfish.hk2.api.TypeLiteral;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.internal.inject.InjectionManager;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider;
import org.glassfish.jersey.server.internal.inject.ParamInjectionResolver;
import org.glassfish.jersey.server.internal.process.RequestProcessingContextReference;
import org.glassfish.jersey.server.spi.internal.ValueParamProvider;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
import javax.ws.rs.FormParam;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.QueryParam;
public class CollectionParamBinder extends AbstractBinder {
@Override
protected void configure() {
bind(CollectionValueParamProvider.CollectionQueryParamProvider.class)
.to(ValueParamProvider.class)
.in(Singleton.class);
bind(CollectionValueParamProvider.CollectionFormParamProvider.class)
.to(ValueParamProvider.class)
.in(Singleton.class);
bind(CollectionValueParamProvider.CollectionHeaderParamProvider.class)
.to(ValueParamProvider.class)
.in(Singleton.class);
bind(QueryParamInjectionResolver.class)
.to(new TypeLiteral>() {})
.in(Singleton.class);
bind(FormParamInjectionResolver.class)
.to(new TypeLiteral>() {})
.in(Singleton.class);
bind(HeaderParamInjectionResolver.class)
.to(new TypeLiteral>() {})
.in(Singleton.class);
}
private static Provider getContainerRequestProvider(final InjectionManager injectionManager) {
return () -> {
RequestProcessingContextReference reference = injectionManager.getInstance(RequestProcessingContextReference.class);
return reference.get().request();
};
}
private static class QueryParamInjectionResolver extends ParamInjectionResolver {
@Inject
public QueryParamInjectionResolver(final Provider mpep, final InjectionManager injectionManager) {
super(new CollectionValueParamProvider.CollectionQueryParamProvider(mpep, injectionManager), QueryParam.class, getContainerRequestProvider(injectionManager));
}
}
private static class FormParamInjectionResolver extends ParamInjectionResolver {
@Inject
public FormParamInjectionResolver(final Provider mpep, final InjectionManager injectionManager) {
super(new CollectionValueParamProvider.CollectionFormParamProvider(mpep, injectionManager), FormParam.class, getContainerRequestProvider(injectionManager));
}
}
private static class HeaderParamInjectionResolver extends ParamInjectionResolver {
@Inject
public HeaderParamInjectionResolver(final Provider mpep, final InjectionManager injectionManager) {
super(new CollectionValueParamProvider.CollectionHeaderParamProvider(mpep, injectionManager), HeaderParam.class, getContainerRequestProvider(injectionManager));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy