2014-11-06 55 views
-1

使用:Java EE + JAX-RS(Apache Wink)+ WAS。JavaEE如何從類聲明它的API路徑

讓說,我有REST 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這條道路不使用反射?我可以在javax.ws.rs.core.UriBuilder方法path(Class clazz)中看到例子,它可以以某種方式得到它,找不到它的來源。

+0

請告訴我您的問題@AndrewBarber ? – 2015-02-04 09:12:34

回答

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要麼方法調用或類和注射兩種HttpServletRequestUriInfo,無論將更加有用,就像這樣:

// 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

這不是我在我的問題中的意思。但thx – 2014-12-11 09:33:48

+0

@ToKra那麼這個'UriBuilder.fromResource(Hello.class).build()。toString()'是如何更多你在找什麼? – Gas 2014-12-11 14:10:34