2013-10-25 18 views
7

Tôi cần thực hiện dịch vụ API proxy với Jersey. Tôi cần có URL yêu cầu đầy đủ trong phương thức jersey. Tôi không muốn chỉ định tất cả các tham số có thể có.java jersey nhận URL đầy đủ

Ví dụ:

@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 
} 

Làm thế nào tôi có thể làm điều đó?

+0

có nghĩa là bạn muốn tạo URL ở đây? và từ nơi bạn muốn nhận giá trị param1 và param2? – Shamse

Trả lời

10

Trong Jersey 2.x (lưu ý rằng nó sử dụng HttpServletRequest đối tượng):

@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

Nếu bạn cần một proxy thông minh, bạn có thể nhận được các thông số, lọc chúng và tạo ra một url mới.

@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

Tài sản là gì? – Ricardo

+0

Đã cập nhật mã. Tất nhiên "chìa khóa" nên được sử dụng. Có vẻ như tôi đã không quản lý để dọn sạch mã được lấy từ dự án của tôi. – Azee

0

thử 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()); 

     ......... 
    } 

OUT PUT: - https://localhost:9091/api/suggestionandfeedback/add

bạn có thể thử sau đây tùy chọn này cũng

enter image description here

0

bạn có thể sử dụng bộ lọc Jersey.

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..."); 

    } 
} 

Sau đó, bạn phải đăng ký nó trong tệp cấu hình http hoặc chỉ mở rộng lớp ResourceConfig. Đây là cách bạn có thể đăng ký nó trong http config class

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"); 

    } 

} 
Các vấn đề liên quan