API REST - 后跟不同的参数?和&

时间:2018-01-01 17:45:06

标签: java json rest api

由于大学的任务,我在网络系统中执行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,网络会调用第一个(findAll),但是,如果我使用/ rest / api / v1 / tfg / State = XXX,它会有效...

谢谢大家!我在等你的回答。

米克尔

2 个答案:

答案 0 :(得分:0)

因为REST API遵循资源。

如果“state”是一个对象,你可以使用 / rest / api / v1 / tfg / State = XXX 但是如果“州”只是 tfg 的属性,您使用/ rest / api / v1 / tfg?State = XXX

答案 1 :(得分:0)

好的伙计们,现在它正在运作。我发布了解决方案,以便为您做出贡献,并尝试在未来为其他人解决此问题。

我在一个实现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();    
}
}

感谢您的贡献,我终于明白了,而且非常简单!