如何使用 Jersey 在 RestFul Web 服务中添加数组名称
How to add array name in RestFul web services using Jersey
我正在使用 jersey 框架构建 restful 网络服务。
我正在 return 创建一个包含多个 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"
}
]
}
这是我的代码:
这是我的对象 class,我在其中设置 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 中,我正在设置连接参数和将结果值存储在数组列表中的方法。
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;
}
}
这是我的服务调用,我实际上 return 使用 @GET http 方法
结果集
OrderDao orderDao = new OrderDao();
@GET
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
public List<Order> getAll() {
return orderDao.getAll();
}
使用 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;
}
这是我得到的解决方案,在 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"
}
]
}
我正在使用 jersey 框架构建 restful 网络服务。
我正在 return 创建一个包含多个 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"
}
]
}
这是我的代码:
这是我的对象 class,我在其中设置 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 中,我正在设置连接参数和将结果值存储在数组列表中的方法。
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;
}
}
这是我的服务调用,我实际上 return 使用 @GET http 方法
结果集OrderDao orderDao = new OrderDao();
@GET
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
public List<Order> getAll() {
return orderDao.getAll();
}
使用 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;
}
这是我得到的解决方案,在 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"
}
]
}