jersey 2: How to create custom HTTP param binding

后端 未结 4 2115
醉梦人生
醉梦人生 2020-12-05 15:08

I am trying to create a custom http param binding for my restful service. Please see the example below.

@POST
@Path(\"/user/{userId}/orders\")
@Produces(Medi         


        
4条回答
  •  南方客
    南方客 (楼主)
    2020-12-05 15:36

    here is my actual implementatipn of UserAuthHeaderParamValueFactoryProvider class

    import javax.inject.Inject;
    import javax.inject.Singleton;
    
    import org.glassfish.hk2.api.Factory;
    import org.glassfish.hk2.api.ServiceLocator;
    import org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory;
    import org.glassfish.jersey.server.internal.inject.AbstractValueFactoryProvider;
    import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider;
    
        import org.glassfish.jersey.server.model.Parameter;
    
        @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 AbstractContainerRequestValueFactory() {
                    @Override
                    public String provide() {
                        //you can use get any header value.
                        return getContainerRequest().getHeaderString("Authorization");
                    }
    
                };
            }
    

提交回复
热议问题