泽西岛多个可能在同一路径上获得响应吗?
Jersey multiple get responses on same path possible?
目前我正在使用 Jetty
+ Jersey
来根据 @GET
参数做出不同的响应,如果传递了 id
,它应该 return任务,如果not
return所有任务。
@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 方法映射到同一路径。你能做的是:
@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);
}
我认为一个不错的解决方案是这样的:
@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/35
=> 35º 任务
目前我正在使用 Jetty
+ Jersey
来根据 @GET
参数做出不同的响应,如果传递了 id
,它应该 return任务,如果not
return所有任务。
@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 方法映射到同一路径。你能做的是:
@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);
}
我认为一个不错的解决方案是这样的:
@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/35
=> 35º 任务