Ich habe die folgende Ressource (nur relevante Methoden sind dargestellt):RESTful Web Application URLs/URIs
@Path("myresource")
public class MyResource {
GroupContainer groups= new GroupContainer(); //holds groups in an arrayList
@GET
@Produces(MediaType.TEXT_HTML)
public String start() {
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.append("<html>");
htmlBuilder.append("<body>");
htmlBuilder.append("<h1>Hello</h1>");
htmlBuilder.append("<p>Following: groups</p> <br>");
for(Group g: groups.getGroups()){
htmlBuilder.append("<p>" + (g.getID() + " | " + g.getName()) + "</p>");
htmlBuilder.append("<form method='GET' action='myresource/" + g.getID() +"'>");
htmlBuilder.append("<input type='submit' value='view this group'/>");
htmlBuilder.append("</form>");
htmlBuilder.append("<form method='DELETE' action='group'>");
htmlBuilder.append("<input type='submit' value='delete this group'/>");
htmlBuilder.append("</form>");
}
htmlBuilder.append("<a href='http://localhost:8080/myapp/myresource/asXML'>show overwiev as XML</a>");
htmlBuilder.append("</body>");
return htmlBuilder.toString();
}
@Path("/{groupid}")
public GroupResource getGroupByID(@PathParam("groupid") long groupid){
Group g=null;
for(int i=0;i!=groups.getGroups().size();++i){
if(groups.getGroups().get(i).getID()==groupid){
g= groups.getGroups().get(i);
break;
}
}
GroupResource grRes= null;
if(g!=null){
grRes= new GroupResource(g);
}
System.out.println(g.getID());
return grRes;
}
}
und ein groupResource wie folgt aussehen:
@Path("group")
public class GroupResource {
public Group group;
public GroupResource(Group group){
this.group= group;
}
@GET
@Produces(MediaType.TEXT_HTML)
public String listGroups(){
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.append("<html>");
htmlBuilder.append("<body>");
htmlBuilder.append("<h1>Displaying Group</h1>");
for(Person g: group.getMembers()){
htmlBuilder.append("<p>" + (g.getID() + " | " + g.getName()) + "</p>");
htmlBuilder.append("<p>" + g.getDescription() + "</p>");
htmlBuilder.append("<form method='GET' action='group/asXML'>");
htmlBuilder.append("<input type='submit' value='view this Member'/>");
htmlBuilder.append("</form>");
htmlBuilder.append("<form method='DELETE' action='group'>");
htmlBuilder.append("<input type='submit' value='delete this member'/>");
htmlBuilder.append("</form>");
htmlBuilder.append("<form method='UPDATE' action='group'>");
htmlBuilder.append("<input type='submit' value='delete this member'/>");
htmlBuilder.append("</form>");
}
/*htmlBuilder.append("<p>Following: groups</p> <br>");
for(Group g: groups){
htmlBuilder.append("<p>" + (g.getID() + " | " + g.getName()) + "</p>");
}*/
htmlBuilder.append("</form>");
htmlBuilder.append("</body>");
return htmlBuilder.toString();
}
}
Wenn http://localhost:8080/myapp/myresource Aufruf ich ein (non-xml) Überblick über die Gruppen, die ich erstellt habe und mit einer Schaltfläche für jede darunter liegende Gruppe. Jetzt mag ich in einer Gruppe suchen:
I htmlBuilder.append("<form method='GET' action='myresource/" + g.getID() +"'>");
auf der Formular-Schaltfläche klicken und wir bekommen genau das, was ich will: Die GET Methode der Gruppen
@GET @Produces(MediaType.TEXT_HTML) public String listGroups(){...}
genannt wird und ich erhalte eine overwiev von jedes Mitglied in dieser Gruppe (die Gruppe Klasse hat eine Arraylist von Mitgliedern, die angezeigt wird)
das einzige Problem ist, dass ich auf der myresource URL irgendwie noch am
, wenn ich einen Blick in meine Browser-Adresse übernehmen bar, th wird gezeigt:
http://localhost:8080/myapp/myresource/3
und ich möchte es so etwas wie http://localhost:8080/myapp/group/3
wie kann ich dies erreichen (wenn wir auf die Gruppe mit einem id == 3 geklickt haben)?