Java 是否可能在同一路径上获取多个响应?

Java 是否可能在同一路径上获取多个响应?,java,web-services,rest,jersey,Java,Web Services,Rest,Jersey,目前,我正在使用Jetty+Jersey来根据@GET参数做出不同的响应,如果传递了id,它将返回任务,如果没有返回所有任务 @GET @Path("task") @Produces(MediaType.APPLICATION_JSON) public ArrayList<Task> getTask(){ return tasks; } @GET @Path("task") @Produces(MediaType.APPLICATION_JSON) public Array

目前,我正在使用
Jetty
+
Jersey
来根据
@GET
参数做出不同的响应,如果传递了
id
,它将返回任务,如果
没有
返回所有任务

@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
@路径(“任务”)
@产生(MediaType.APPLICATION_JSON)
公共数组列表getTask(){
返回任务;
}
@得到
@路径(“任务”)
@产生(MediaType.APPLICATION_JSON)
公共ArrayList getTasks(@QueryParam(“id”)字符串id){
返回任务(uuid);
}

这可能吗?我怎么做呢?

这是不可能的。不能将多个GET方法映射到同一路径。您可以做的是:

@GET
@路径(“任务”)
@产生(MediaType.APPLICATION_JSON)
公共ArrayList getTask(@QueryParam(“id”)字符串uuid){
if(id==null){
返回任务;
}
返回任务(uuid);
}
对于路径,您只需要在
@path
中精确地显示您所期望的内容。 例如:

@GET
@路径(“任务”)
@产生(MediaType.APPLICATION_JSON)
公共数组列表getTask(){
返回任务;
}
@得到
@路径(“任务/{id}”)
@产生(MediaType.APPLICATION_JSON)
公共ArrayList getTasks(@PathParam(“id”)字符串id){
返回任务(uuid);
}

我认为一个好的解决方案是这样的:

@GET
@Path("task/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Task getTasks(@PathParam("id") String id) throws JSONException{
    return task(id);
}
@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);
    }
}
但您可以仅为该资源创建一个类,并创建如下内容:

@GET
@Path("task/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Task getTasks(@PathParam("id") String id) throws JSONException{
    return task(id);
}
@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);
    }
}
@Path(“/tasks”)
公共类任务服务{
@得到
@产生(MediaType.APPLICATION_JSON)
public ArrayList getTask()抛出JSONException{
返回任务;
}
@得到
@路径(“{id}”)
@产生(MediaType.APPLICATION_JSON)
公共任务gettask(@PathParam(“id”)String id)抛出JSONException{
返回任务(id);
}
}
您可以使用
localhost:8080/bla/tasks
=>所有任务获取资源
localhost:8080/blabla/tasks/35
=>35º任务

我从未尝试过。我认为那是不可能的。为什么你不做像
resource/task
resource/task/{id}
这样的事情呢?那将是更好的解决方案,你能帮我找到路径吗?你能告诉我把响应对象作为返回值有什么区别吗?这是因为RESTful通常与HTTP协议一起工作,它们在响应中显式地发送HTTP状态,所以客户端可以管理它。你可以看看这个问题: