泽西岛多个获得同一路径上的回应可能?

目前,我正在使用Jetty + Jersey根据@GET参数使不同的响应成为可能,如果一个id被传递,它将返回任务,如果not返回所有任务。

@GET
@Path("task")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Task> getTask(){
    return tasks;
}

@GET
@Path("task")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Task> getTasks(@QueryParam("id") String id){
    return task(uuid);
}

这可能吗? 我该怎么做?


我认为一个很好的饮料是这样的:

@GET
@Path("task/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Task getTasks(@PathParam("id") String id) throws JSONException{
    return task(id);
}

但是你可以只为这个资源做一个Class,并且像这样做:

@Path("/tasks")
public class TasksService{

@GET
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Task> getTask() throws JSONException{
    return tasks;
}

@GET
    @Path("{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Task getTasks(@PathParam("id") String id) throws JSONException{
        return task(id);
    }
}

你可以通过localhost:8080/blablabla/tasks获得资源localhost:8080/blablabla/tasks =>所有任务localhost:8080/blablabla/tasks/35 =>35º任务


这不可能。 我们不能将多个GET方法映射到相同的路径。 你可以做的是:

@GET
@Path("task")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Task> getTask(@QueryParam("id") String uuid){
    if (id == null) {
        return tasks;
    }
    return task(uuid);
}

有了这个路径,你只需要在@Path精确地预测你所期望的。 例如 :

@GET
@Path("task")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Task> getTask(){
    return tasks;
}

@GET
@Path("task/{id}")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Task> getTasks(@PathParam("id") String id){
    return task(uuid);
}
链接地址: http://www.djcxy.com/p/45581.html

上一篇: Jersey multiple get responses on same path possible?

下一篇: How can I send a response code and content from a resource?