Domanda

Trovo difficile mettere la domanda esatta in parole, quindi darò un esempio.

Ho un servizio di riposo che consente di visualizzare tutti gli organismi disponibili creando un collegamento per ciascuno di essi.Questo funziona bene.

Ma ora ho bisogno di trovare un modo per visualizzare i valori di enum concreto in JSON quando si fa clic su uno dei collegamenti forniti.

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;
    }

}
.

Ecco un esempio di JSON Risposta dopo aver chiamato "/ Enums":

{
"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"
}
}
.

Qualche idea come questo può essere raggiunto?Ogni risposta è molto apprezzata.

Grazie.

È stato utile?

Soluzione

Ecco come lo farei:

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); 
    }
  }

}
.

Come suggerito da JB Nizet, potresti anche aspettarti di ricevere il nome completo di Enum.In questo caso, dimentica la mappa e usa la riflessione per ottenere la classe Enum.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top