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状态,所以客户端可以管理它。你可以看看这个问题: