如何使用Jersey在RestFul Web服务中添加阵列名称

时间:2018-10-22 06:56:45

标签: java rest web-services jersey

我正在使用jersey框架来构建宁静的Web服务。

我正在返回一个包含多个JSONObject的arraylist作为响应。

但是我的查询是,我想在JSONObject之前添加数组名称。

我正在获得此输出:

[
    {
        "p1": "1",
        "p2": "AM",
        "p3": "Bad"
    },
    {
       "p1": "2",
        "p2": "PM",
        "p3": "Good"
    }
]

但是我期望(需要)这个:

 {
    "result": [   {
                "p1": "1",
                "p2": "AM",
                "p3": "Bad"
            },
            {
               "p1": "2",
                "p2": "PM",
                "p3": "Good"
             }
            ]
        }

这是我的代码:

这是我的对象类,我在其中设置用于将值存储在对象中的getter和setter。

public class Order implements Serializable{

    public Order() {
    }

    public Order(int id, String officialname, String contact_no) {
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;

    }
public int getp1() {
        return p1;
    }

    public void setp1(int p1) {
        this.p1 = p1;
    }
public int getp2() {
        return p2;
    }

    public void setp2(int p2) {
        this.p2 = p2;
    }
}

在OrderDao中,我正在设置连接参数和将结果值存储在arraylist中的方法。

OrderDao.java

public class OrderDao {
    Connection conm=null;
    ResultSet rs = null;
     Statement statement = null;

    public  List<Order> getAll() {
        List<Order> order = null;
        try{
       conm= DBconnect.connectToDB();
       statement=conm.createStatement();
       rs=statement.executeQuery("SELECT * FROM `order`");

       order = new ArrayList<>();

        while (rs.next()) {
            int p1 = rs.getString(1);
            String p2 = rs.getString(2);
            String p3 = rs.getString(3);


            order.add(new Order(p1,p2,p3));

        }

        rs.close();
        statement.close();
        conm.close();
        }catch(Exception e){
            e.printStackTrace();
        }

        return order;

    }
}

这是我的服务呼叫,实际上我使用@GET http方法返回结果集

OrderDao orderDao = new OrderDao();
@GET
    @Path("/users")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Order> getAll() {
        return orderDao.getAll();
    }

2 个答案:

答案 0 :(得分:0)

使用Gson API创建所需的JSON。

@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
    public String getAll() //change return type to String
    {  
    JsonObject listObj=new JsonObject();
    listObj.add("result", gson.toJsonTree(orderDao.getAll()));

    String responseJson=gson.toJson(listObj);
    return responseJson;
    }

答案 1 :(得分:0)

这是我得到的解决方案,在JSONObject之前显示数组名称。

@GET
    @Path("/order")
    @Produces(MediaType.APPLICATION_JSON)

public Map<String,List<Order>> getAllorder(){
    List <Order> list = new ArrayList<>();
    List <Order> list = orderDao.getAll();
    LinkedHashMap<String,List<Order>> map = new LinkedHashMap<>();
    map.put("order", list);
    return map;
}

这是我的输出:

{
    "result": [   {
                "p1": "1",
                "p2": "AM",
                "p3": "Bad"
            },
            {
               "p1": "2",
                "p2": "PM",
                "p3": "Good"
             }
            ]
        }