JAX-RS(Jersey)を使用してその名前から列挙値を取得する
質問
正確な質問を言葉に入れるのが難しいと思うので、私はただ一例を与えます。
私はそれぞれのリンクを作成することによって利用可能なすべての列挙型を見ることを可能にするRESTサービスを持っています。これはOKです。
しかし今、私は提供されたリンクの1つをクリックしたときに、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;
}
}
.
"/ enums"を呼び出した後の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"
}
}
.
どんなアイデアもどれほど達成できるか?すべての答えは高く評価されています。
ありがとうございました。
解決
これは私がそれをする方法です:
Map<String, Class<Enum>> map = ... //Map <Enum name, Enum class>
@SuppressWarnings("rawtypes")
@GET
@Path("/{enum}")
@Produces(MediaType.APPLICATION_JSON)
public Response enums(@PathParam("enum") String enumName){
Class c = map.get(enumName);
if(c!=null) {
for(Enum e : c.getEnumConstants() {
LOGGER.info(e);
}
}
}
.
JB Nizetによって提案されているように、あなたはまた列挙体の完全修飾名を受け取ることを期待することができます。この場合は、地図を忘れて反射を使って列挙型クラスを取得してください。
所属していません StackOverflow