2013-10-25 12 views
7

मुझे जर्सी के साथ प्रॉक्सी एपीआई सेवा करने की आवश्यकता है। मुझे जर्सी विधि में पूर्ण अनुरोध URL होना चाहिए। मैं सभी संभावित पैरामीटर निर्दिष्ट नहीं करना चाहता हूं।जावा जर्सी पूर्ण यूआरएल

उदाहरण के लिए:

@GET 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
@Path("/media.json") 
public String getMedia(){ 
    // here I want to get the full request URL like /media.json?param1=value1&param2=value2 
} 

मैं इसे कैसे कर सकता है?

+0

का अर्थ है कि आप यहां एक यूआरएल बनाना चाहते हैं? और जहां से आप param1 और param2 मान प्राप्त करना चाहते हैं? – Shamse

उत्तर

10

जर्सी 2.x में (ध्यान दें यह का उपयोग करता है HttpServletRequest वस्तु):

@GET 
@Path("/test") 
public Response test(@Context HttpServletRequest request) { 
    String url = request.getRequestURL().toString(); 
    String query = request.getQueryString(); 
    String reqString = url + " + " + query; 
    return Response.status(Status.OK).entity(reqString).build(); 
} 
4

आप एक स्मार्ट प्रॉक्सी की जरूरत है, तो आप, मानकों मिलता है उन्हें फ़िल्टर और एक नया यूआरएल बना सकते हैं।

@GET 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
@Path("/media.json") 
public String getMedia(@Context HttpServletRequest hsr){ 
    Enumeration parameters = hsr.getParameterNames(); 
    while (parameters.hasMoreElements()) { 
     String key = (String) parameters.nextElement(); 
     String value = hsr.getParameter(key); 
    //Here you can add values to a new string: key + "=" + value + "&"; 
    } 

} 
+0

संपत्ति क्या है? – Ricardo

+0

कोड अपडेट किया गया। बेशक "कुंजी" का उपयोग किया जाना चाहिए। ऐसा लगता है कि मैंने अपनी परियोजना से लिया गया कोड साफ़ करने का प्रबंधन नहीं किया था। – Azee

0

UriInfo uriInfo कोशिश,

@POST 
    @Consumes({ MediaType.APPLICATION_JSON}) 
    @Produces({ MediaType.APPLICATION_JSON}) 
    @Path("add") 
    public Response addSuggestionAndFeedback(@Context UriInfo uriInfo, Student student) { 

      System.out.println(uriInfo.getAbsolutePath()); 

     ......... 
    } 

रख: - https://localhost:9091/api/suggestionandfeedback/add

आप निम्नलिखित कोशिश कर सकते हैं भी विकल्प

enter image description here

0

आप जर्सी फिल्टर का उपयोग कर सकते हैं।

public class HTTPFilter implements ContainerRequestFilter { 

private static final Logger logger = LoggerFactory.getLogger(HTTPFilter.class); 

    @Override 
    public void filter(ContainerRequestContext containerRequestContext) throws IOException { 

     logger.info(containerRequestContext.getUriInfo().getPath() + " endpoint called..."); 
     //logger.info(containerRequestContext.getUriInfo().getAbsolutePath() + " endpoint called..."); 

    } 
} 

इसके बाद आपको इसे http कॉन्फ़िगरेशन फ़ाइल में पंजीकृत करना होगा या बस संसाधन कॉनफिग क्लास का विस्तार करना होगा। इस प्रकार आप इसे http कॉन्फ़िगरेशन क्लास

public class HTTPServer { 

    public static final Logger logger = LoggerFactory.getLogger(HTTPServer.class); 

    public static void init() { 

     URI baseUri = UriBuilder.fromUri("http://localhost/").port(9191).build(); 
     ResourceConfig config = new ResourceConfig(Endpoints.class, HTTPFilter.class); 
     HttpServer server = JdkHttpServerFactory.createHttpServer(baseUri, config); 

     logger.info("HTTP Server started"); 

    } 

} 
संबंधित मुद्दे