由于大学的任务,我在我的网络系统中做了一个API。问题是我无法做一个特定的部分,我认为这很容易。
声明说:
* GET / rest / api / v1 / tfg?State = $ {state}
指定状态下所有TFG的列表。您可以同时指示不同的状态。为此,您必须多次重复state参数(例如:“?State = state1&State = state2&State = state3”),并且Web服务将返回处于任何这些状态的所有人。*
我有一个带项目的数据库(TFG),我知道如何获取这些数据,但问题是我不知道该怎么做才能检测到?在URL中,如何根据数量读取不同的参数。可能有一个州或N个州。我该怎么做?
目前的代码是这样的:
@Path("/rest/api/v1/tfg")
public class TfgREST {
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public Response findAll() throws ServletException, IOException {
TfgDao dao = new TfgDao();
LinkedList<Projecte> llista = dao.findAll(true); //TRUE because of API
JsonArrayBuilder array = Json.createArrayBuilder();
for(Projecte p : llista){
array.add(p.getTitol());
}
return Response.ok(array.build()).build();
}
@GET
@Path("/?state={state}")
@Produces(MediaType.APPLICATION_JSON)
public Response findByState(@PathParam("state") String state) throws ServletException, IOException {
TfgDao dao = new TfgDao();
LinkedList<String> llista = dao.findByState(state);
//JsonObjectBuilder jo = Json.createObjectBuilder();
JsonArrayBuilder array = Json.createArrayBuilder();
for(String p : llista){
array.add(p);
}
return Response.ok(array.build()).build();
}
如果我调用http://...../rest/api/v1/tfg?State=XXXX,web调用第一个(findAll),但是,如果我使用/ rest / api / v1 / tfg / State = XXX它可以工作......
谢谢大家!我在等你的答案。
米克尔
因为REST API遵循资源。
如果“state”是一个对象,你可以使用/ rest / api / v1 / tfg / State = XXX但是如果“state”只是tfg的属性,你使用/ rest / api / v1 / tfg?State = XXX
好的,现在它正在运作。我发布了解决方案,以便为您做出贡献,并尝试在将来为其他人解决此问题。
我在一个实现if的方法中混合了两种方法。
代码如下:
@Path("/rest/api/v1/tfg")
public class TfgREST {
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public Response findAll(@QueryParam("state") List<String> state) throws ServletException, IOException {
TfgDao dao = new TfgDao();
JsonArrayBuilder array = Json.createArrayBuilder();
if(state.isEmpty()){
LinkedList<Projecte> llista = dao.findAll(true); //TRUE because of API
for(Projecte p : llista){
array.add(p.getTitol());
}
}
else{
LinkedList<String> projs;
for (String s : state){
projs = dao.findByState(s);
for (String x : projs){
array.add(x);
}
}
}
return Response.ok(array.build()).build();
}
}
感谢您的贡献,我终于明白了,而且非常简单!