Я использую фреймворк для создания удобных веб-сервисов.

Я возвращаю один массив, содержащий несколько объектов JSONObject в качестве ответа.

Но мои запросы: я хочу добавить имя массива перед 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"
             }
            ]
        }

Это мой код:

Это мой объектный класс, в котором я настраиваю геттер и сеттер для хранения значения в объекте.

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();
    }
0
Harshal Deshmukh 22 Окт 2018 в 09:56

2 ответа

Лучший ответ

Это решение, которое у меня есть, показать имя массива перед 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"
             }
            ]
        }
0
Harshal Deshmukh 27 Окт 2018 в 06:44

Используйте 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;
    }
0
Tarun 22 Окт 2018 в 07:21
52923796