【问题标题】:Jersey multiple get responses on same path possible?泽西岛多个可能在同一路径上得到响应?
【发布时间】:2015-11-21 21:18:39
【问题描述】:

目前我正在使用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);
}

这可能吗?我该怎么做?

【问题讨论】:

  • 我从未尝试过。我认为这是不可能的。
  • 为什么你不喜欢resource/taskresource/task/{id}
  • 那将是更好的解决方案,您能帮我解决一下吗?

标签: java web-services rest jersey


【解决方案1】:

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

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

然后你会通过localhost:8080/blablabla/tasks => 获得所有任务的资源 localhost:8080/blablabla/tasks/35 => 35º 任务

【讨论】:

  • 您能否告诉我将响应对象作为返回值(如stackoverflow.com/questions/13703807/…)有什么区别?
  • 这是因为 RESTful 通常使用 HTTP 协议,并且它们在响应中显式发送 HTTP 状态,因此客户端可以管理它。你可以看看这个问题:question
【解决方案2】:

这是不可能的。我们不能将多个 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    相关资源
    最近更新 更多