如何使用jersey将单个元素转换为arraylist并格式化为json?

时间:2013-09-11 07:51:23

标签: java json arraylist jersey

泽西岛默认情况下将单个元素转换为对象。但客户端期望json中的数据是arraylist

模型类是LocationDetails

public class LocationDetails {
    private String locationAccount;
    private String locationName;
    private String locationStreet;
    private String locationPostcode;
}

其他类LocationData,其LocationDetails的arraylist为

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class LocationData {
    private ArrayList<LocationDetails> Locations;
}

并且控制器类使用以下代码转换为JSON:

  //Getting location and item along with barcodes
        @POST
        @Path("/getLocationAndItemData")
        @Produces(MediaType.APPLICATION_JSON)
        public LocationResponse getAlllocations(){
               ArrayList<LocationDetails> locationDetailList = new ArrayList<LocationDetails>();
               LocationDetails details = new LocationDetails();
           //setting location account                        
               details.setLocationAccount("10125");
               locationDetailList.add(details); 
}

以下代码将json作为LocationData : {LocationDetails : {"LocationAccount","10125"}}

返回

而我希望它像:

LocationData : {LocationDetails : [{"LocationAccount","10125"}]}

因为客户端希望数据在列表中。

如何在不改变整个逻辑的情况下转换类型。我正在使用运动衫。

2 个答案:

答案 0 :(得分:1)

@XmlElementWrapper注释添加到List,这应该可以解决问题。如果您对Jersey有进一步的问题,请先尝试XML输出以查看正在生成的内容。如果XML没问题,那么JSON也是如此。

@XmlElement(name="locationDetail")
@XmlElementWrapper(name="locationDetails")
private List<LocationDetail> locationDetails;

请用第一个小写字母命名您的类属性。

答案 1 :(得分:0)

我也有同样的问题,经过如此多的研究后我发现问题是由MyEclipse(持久容器)中导入的jar文件引起的。我删除了那个。相同的代码适合我。 json格式为[{single element}].