JavaEE Как получить путь API из класса, объявив его
Использование: Java EE + JAX-RS (Apache Wink) + WAS.
Допустим, у меня есть Rest API, объявленный классом Hello, путь "/hello"
@Path("/hello")
public class Hello{
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response sayHello() {
Map<String, String> myMap = new LinkedHashMap<String, String>();
myMap.put("firstName", "To");
myMap.put("lastName", "Kra");
myMap.put("message", "Hello World!");
Gson gson = new Gson();
String json = gson.toJson(myMap);
return Response.status(200).entity(json).build();
}
}
Как я могу получить этот путь от Hello.class
без использования отражений? Я вижу пример в javax.ws.rs.core.UriBuilder
метод path(Class clazz)
который может получить это как-то, не может найти источники этого.
2 ответа
Решение
Решение с отражениями:
/**
* Gets rest api path from its resource class
* @param apiClazz
* @return String rest api path
*/
public static String getRestApiPath(Class<?> apiClazz){
Annotation[] annotations = apiClazz.getAnnotations();
for(Annotation annotation : annotations){
if(annotation instanceof Path){
Path pathAnnotation = (Path) annotation;
return pathAnnotation.value();
}
}
return "";
}
Добавлять @Context
либо вызов метода или класса и ввести либо HttpServletRequest
или же UriInfo
что бы ни было более полезным, вот так:
// as class fields
@Context
private HttpServletRequest request;
@Context
private UriInfo uriInfo;
...
// or as param in method
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response sayHello(@Context UriInfo uriInfo) {
....
System.out.println(request.getRequestURI());
System.out.println("uri: " + uriInfo.getPath());
System.out.println("uri: " + uriInfo.getBaseUri());