2015-05-19 39 views
1

我正在编写REST风格的web服务。在java中返回XML结构中重复标记的列表

服务器:Glassfish的4.0 IDE:Eclipse的

我期待这样的XML标签即应在订单中的所有项目重复,因为可能是一个为了多个项目。

<Orders> 
    <Order> 
    <Id>1</Id> 
    <Items> 
    <Item>A</Item> 
    <Item>B</Item> 
    <Item>C</Item> 
    </Items> 
    <User>Simran</User> 
    <Total_amount>1100</Total_amount> 
    </Order> 
    <Order> 
    <Id>2</Id> 
    <Items> 
    <Item>A</Item> 
    <Item>B</Item> 
    <Item>D</Item> 
    </Items> 
    <User>Simran</User> 
    <Total_amount>1300</Total_amount> 
    </Order> 
</Orders> 

我与我当前的代码得到什么:(无标签)

<Orders> 
    <Order> 
    <Id>1</Id> 
    <User>Simran</User> 
    <Total_amount>1100</Total_amount> 
    </Order> 
    <Order> 
    <Id>2</Id> 
    <User>Simran</User> 
    <Total_amount>1300</Total_amount> 
    </Order> 
</Orders> 

网址:http://localhost:8080/GigstartServices/GET/Users/1/Orders

我没有得到任何异常/错误/或部署的问题无论是。 代码在Java:

Orders.java看起来是这样的:

package com.dto; 

    import java.util.ArrayList; 

    import javax.xml.bind.annotation.XmlElement; 
    import javax.xml.bind.annotation.XmlElementWrapper; 
    import javax.xml.bind.annotation.XmlRootElement; 

    @XmlRootElement 
    public class Orders { 

     private int id; 
     private ArrayList<Integer> items; 
     private int userId; 
     private int totalAmount; 

    public Orders(){ 

     } 
    private ArrayList<Integer> Items; 
     public Orders(int id,ArrayList<Integer> items, int userId , int totalAmount){ 
      Items = new ArrayList<Integer>(); 
      this.id = id; 
      this.Items = items; 
      this.userId = userId; 
      this.totalAmount = totalAmount; 

     } 
     /** 
     * @return the Id 
     */ 
     public int getId() { 
      return id; 
     } 
     /** 
     * set Id 
     */ 
     public void setId(int id) { 
      this.id = id; 
     } 
     /** 
     * @return the ItemId 
     */ 
     @XmlElementWrapper(name="Items") 
     @XmlElement(name="Item") 
     public ArrayList<Integer> getItemId() { 
      return Items; 
     } 
     /** 
     * @set name 
     */ 
     public void setItem(ArrayList<Integer> items) { 
      this.items = items; 
     } 
     /** 
     * @return price 
     */ 
     public int getUserId() { 
      return userId; 
     } 
     /** 
     * set price 
     */ 
     public void setUserId(int userId) { 
      this.userId = userId; 
     } 

     public int getTotalAmount(){ 
      return totalAmount; 
     } 

     public void setTotalAmount(int totalAmount){ 
      this.totalAmount = totalAmount; 
     } 
    } 

OrderResource.java

package com.dao; 

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.util.ArrayList; 

import com.dto.Orders; 

public class OrderResource { 
int total; 
    public ArrayList<Orders> GetOrders(Connection connection, int id) throws Exception 
    { 
     ArrayList<Orders> feedData = new ArrayList<Orders>(); 
     ArrayList<Integer> itemsId = new ArrayList<Integer>(); 
     try 
     { 
      PreparedStatement ps = connection.prepareStatement("SELECT o.id, o.userId FROM dbo.Orders o join dbo.Items I on o.itemId = I.id join dbo.Users u on o.UserId = u.Id where o.UserId = ?"); 
      ps.setInt(1, id); 
      ResultSet rs = ps.executeQuery(); 
      while(rs.next()) 
      { 
       Orders o = new Orders(); 
       o.setId(rs.getInt("id")); 
       ps = connection.prepareStatement("SELECT ItemId,price FROM dbo.Orders o join dbo.Items I on o.itemId = I.id where o.UserId= ?"); 
       ps.setInt(1, id); 
       ResultSet rs2 = ps.executeQuery(); 
       while(rs2.next()){ 
       itemsId.add(rs2.getInt("ItemId")); 
       total = total + rs2.getInt("price"); 
       } 
       o.setItem(itemsId); 
       o.setUserId(rs.getInt("userId")); 
       o.setTotalAmount(total); 
       feedData.add(o); 
      } 
      return feedData; 
     } 
     catch(Exception e) 
     { 
      throw e; 
     } 
    } 

} 

OrderService.java

package com.webService; 

import java.sql.Connection; 
import java.util.ArrayList; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import com.dao.Database; 
import com.dao.OrderResource; 
import com.dao.Resources; 
import com.dto.Items; 
import com.dto.Orders; 
@Path("/") 
public class OrderService { 
OrderService(){ 

} 
    ArrayList<Orders> u = null; 
    Database database= new Database(); 

     @GET 
     @Produces(MediaType.APPLICATION_XML) 
     public ArrayList<Orders> getOrders(@PathParam("userid") int userid) throws Exception 
     { 
      Connection connection = database.GetConnection(); 
      OrderResource ur= new OrderResource(); 
      u=ur.GetOrders(connection, userid); 
     return u; 
     } 
} 

回答

1

监守你没有设置你的Items但你设置items

@XmlElementWrapper(name="Items") 
    @XmlElement(name="Item") 
    public ArrayList<Integer> getItemId() { 
     return **Items**; 
    } 
    /** 
    * @set name 
    */ 
    public void setItem(ArrayList<Integer> items) { 
     **this.items** = items; 
    } 
+0

@sgpatil:这并没有主动帮助成绩并没有改变 –