Java jersey получить полный URL
Мне нужно прокси-сервис API с Джерси.
Мне нужен полный 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¶m2=value2
}
Как я могу это сделать?
Ответы
Ответ 1
В Jersey 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();
}
Ответ 2
Если вам нужен интеллектуальный прокси-сервер, вы можете получить параметры, фильтровать их и создать новый URL-адрес.
@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 + "&";
}
}
Ответ 3
попробуйте 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/offertionandfeedback/add
Вы также можете попробовать следующие варианты
![enter image description here]()
Ответ 4
вы можете использовать фильтры Джерси.
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...");
}
}
После этого u должен зарегистрировать его в файле конфигурации http или просто расширить класс ResourceConfig. Вот как можно зарегистрировать его в 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");
}
}