2014-11-06 2 views
-1

Java EE + JAX-RS (Apache Wink) + WAS.JavaEE 선언하는 클래스에서 API 경로를 얻는 방법

하자가 "/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에서 해당 경로를 얻을 수있는 경로, 나는 나머지 API 안녕하세요 클래스가 선언이 있다고? 나는 javax.ws.rs.core.UriBuilder 메서드 path(Class clazz)에서 예제를 볼 수 있는데, 어떻게 든 그것을 얻을 수 있으며, 소스를 찾을 수 없습니다.

+0

무슨 문제 @AndrewBarber ? –

답변

0

솔루션 :

/** 
* 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 ""; 
} 
1

메소드 호출 또는 클래스 중 하나에 @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()); 
+0

이것은 내 질문에서 의미하는 바가 아닙니다. but thx –

+0

@ToKra 그래서이 'UriBuilder.fromResource (Hello.class) .build(). toString()'에 대해 더 많이 알고 계신가요? – Gas

관련 문제