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

问题描述 投票:0回答:2

由于大学的任务,我在我的网络系统中做了一个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它可以工作......

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

米克尔

java json rest api
2个回答
0
投票

因为REST API遵循资源。

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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.