0
我發現很難將確切的問題轉化爲單詞,所以我只舉一個例子。使用JAX-RS(澤西島)獲取其名稱的枚舉值
我有一個REST服務,它允許查看所有可用的枚舉,方法是爲每個枚舉創建一個鏈接。這工作正常。
但現在我需要找到一種方式來顯示具體的枚舉值在JSON中,當提供的鏈接之一被點擊。
EnumResource.class:
@Path("/enums")
public class EnumsResource
{
public EnumsResource()
{
}
@SuppressWarnings("rawtypes")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response enums(@Context
UriInfo info){
List<Class> resourceClasses = getAllResourceClasses();
List<Link> enumLinks = new ArrayList<Link>();
String contextPath = Link.getFullyQualifiedContextPath(info);
for (Class clazz : resourceClasses)
{
for (Field field : clazz.getDeclaredFields())
{
if (field.getAnnotation(Enumerated.class) != null)
{
Link link = new Link(contextPath+"/enums/", field.getName());
enumLinks.add(link);
}
}
}
RestResponseMetadata metadata = new RestResponseMetadata(200, 200000);
RestResponse response = new RestResponse(metadata, enumLinks);
return Response.ok().entity(response).build();
}
@SuppressWarnings("rawtypes")
@GET
@Path("/{enum}")
@Produces(MediaType.APPLICATION_JSON)
public Response enums(@PathParam("enum") String enumName){
????
}
@SuppressWarnings("rawtypes")
private List<Class> getAllResourceClasses()
{
List<Class> classes = new ArrayList<Class>();
for (ResourcePath path : ResourcePathProvider.getInstance().getAllResourcePaths())
{
classes.add(path.getAssociatedClass());
}
return classes;
}
}
這裏的JSON響應的例子調用後 「/枚舉」:
{
"metadata":{
"code":200,
"errorCode":200000,
"userMessage":null,
"developerMessage":null
},
"content":[
{
"href":"http://localhost:8080/source/api/enums/status"
},
{
"href":"http://localhost:8080/source/api/enums/role"
},
{
"href":"http://localhost:8080/source/api/enums/license"
},
{
"href":"http://localhost:8080/source/api/enums/selectedLicense"
}
}
任何想法如何可以做到這一點?每個答案都非常感謝。
謝謝。
某處,您可以維護所有可重用枚舉類的列表。然後,方法'Class#getEnumConstants()'應該是有用的。 –
您正在傳遞恰好屬於枚舉類型的實體字段的名稱。例如,您應該傳遞枚舉完全限定的類名稱:'com.foo.bar.License'。 –
是的,我同意。如果我可以有一個完全指定的類名,那將會容易得多。但我只需要一個簡單的類名。 – amenoire