2012-11-21 12 views
5

Ten kod działa poprawnie, jeśli przenieść klasy (MyClass), która @XmlRoolElementJak przenieść listę Primitive z Jersey + JAXB + JSON

Client

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

Ale gdy próbuję przenieść prymitywne, jak String, Integer, Boolean, itp ...

Client

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

otrzymuję błąd:

stanie zebrać typu „java.lang.Integer” jako element, ponieważ brakuje adnotacji @XmlRootElement

mogę uzyskać dokładnie taki sam efekt podczas wysyłania parametr jednostki na moją prośbę:

Client

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

Server

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

Czy istnieje sposób, aby Transfer tego rodzaju listy bez tworzenia klasy otoki dla każdej z tych prymitywnych typu ?? Czy może brakuje mi czegoś oczywistego?

Odpowiedz

1

Znalazłem pracę przez kontrolowanie un-/ rozkazów ręcznie, bez Jersey.

Client

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

Server

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

I klasa util użyłem:

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); 
    } 
} 
Powiązane problemy