2012-11-21 72 views
5

此代碼工作正常,如果我傳遞一個類(MyClass的)已經@XmlRoolElement如何傳輸的原始列表與新澤西+ JAXB + JSON

客戶

WebResource webResource = restClient.resource(getRessourceURL()); 
return webResource.get(new GenericType<List<MyClass>>(){}); 

但如果我嘗試轉移原始,比如字符串,整數,布爾等..

客戶

WebResource webResource = restClient.resource(getRessourceURL()); 
return webResource.get(new GenericType<List<Integer>>(){}); 

我收到錯誤:

不能編組型「java.lang.Integer中的」爲元素,因爲它缺少一個@XmlRootElement註釋

我得到完全相同的結果發送實體參數,以我的請求時:

客戶

WebResource webResource = restClient.resource(getRessourceURL()); 
return webResource.post(new GenericType<List<Integer>>(){}, Arrays.toList("1")); 

服務器

@GET 
@Path("/PATH") 
@Produces(MediaType.APPLICATION_JSON) 
public List<MyClass> getListOfMyClass(List<Integer> myClassIdList) 
{ 
    return getMyClassList(myClassIdList); 
} 

有沒有辦法來轉院這種名單沒有爲這些基本類型創建一個包裝類?還是我錯過了明顯的東西?

回答

1

我發現了一個解決方法,通過手工控制un// marshalling,沒有澤西島。

客戶

WebResource webResource = restClient.resource(getRessourceURL()); 
return webResource.post(new GenericType<List<Integer>>(){}, JAXBListPrimitiveUtils.listToJSONArray(Arrays.toList("1"))); 

服務器

@GET 
@Path("/PATH") 
@Produces(MediaType.APPLICATION_JSON) 
public List<MyClass> getListOfMyClass(JSONArray myClassIdList) 
{ 
    return getMyClassList(JAXBListPrimitiveUtils.<Integer>JSONArrayToList(myClassIdList)); 
} 

而且UTIL類我用:

import java.util.ArrayList; 
import java.util.List; 

import org.codehaus.jettison.json.JSONArray; 
import org.codehaus.jettison.json.JSONException; 

public class JAXBListPrimitiveUtils 
{ 

    @SuppressWarnings("unchecked") 
    public static <T> List<T> JSONArrayToList(JSONArray array) 
    { 
    List<T> list = new ArrayList<T>(); 
    try 
    { 
     for (int i = 0; i < array.length(); i++) 
     { 
     list.add((T)array.get(i)); 
     } 
    } 
    catch (JSONException e) 
    { 
     java.util.logging.Logger.getLogger(JAXBListPrimitiveUtils.class.getName()).warning("JAXBListPrimitiveUtils :Problem while converting JSONArray to arrayList" + e.toString()); 
    } 

    return list; 
    } 

    @SuppressWarnings("rawtypes") 
    public static JSONArray listToJSONArray(List list) 
    { 
    return new JSONArray(list); 
    } 
}