Jersey-Client kann JSON-Dienste nicht deserialisieren - Ausnahme (Instanz kann nicht deserialisiert werden)

Welches API-Trikot (JARS) wird standardmäßig zum Generieren von JSON verwendet? Beispiel:

 {
        "kategorijaartikla": [
            {
                "id": "1",
                "kategorija": "kategorija1"
            },
            {
                "id": "2",
                "kategorija": "kategorija2"
            }
        ]
    }

Ist es besser, Array zu verwenden? Ich denke, es ist einfacher zu analysieren. Was denkst du? Beispiel:

 [
        {
            "id": "1",
            "kategorija": "kategorija1"
        },
        {
            "id": "2",
            "kategorija": "kategorija2"
        }
    ]

Ich habe json jersey services:

 @GET
@Produces("application/json")
    public List<kategorijaartikla>  GetSveKategorije (){


        return KategorijaArtiklaDAO.getInstance().getAll();
    }

Da ist meinekategorijaartikla.java

Ich verwende EJB-Anotation für das Mapping im Ruhezustand und jaxB für das Deserialisieren und Serialisieren von JSON.

kategorijaartikla.java

@Entity
@XmlRootElement
public class kategorijaartikla {
    /** @pdOid f9032734-7d05-4867-8275-bf10813c3748 */
    @Id
    @GeneratedValue
    private Integer id;
    private String kategorija;

    public kategorijaartikla() {
        // TODO Add your own initialization code here.
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer newId) {
        this.id = newId;
    }

    public String getKategorija() {
        return kategorija;
    }

    public void setKategorija(String newKategorija) {
        this.kategorija = newKategorija;
    }
}

Es gibt meinen Trikot-Kundencode:

ClientConfig clientConfig = new DefaultClientConfig();
        clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
                Boolean.TRUE);
        Client client = Client.create(clientConfig);
        WebResource r = client
                .resource("http://tomcat.fit.ba/asdf/rest/GetAllKategorije");

        List<kategorijaartikla> output = r.get(new GenericType<List<kategorijaartikla>>() {});

        System.out.println("Output from Server .... \n");
        System.out.println(output.size());

Nach dem Anruf habe ich Ausnahme:

Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@cc4364; line: 1, column: 1]
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:564)
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:524)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:696)
    at com.sun.jersey.api.client.WebResource.get(WebResource.java:196)
    at com.fit.test.Json.GetAllKategorijeJson.main(GetAllKategorijeJson.java:34)
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@cc4364; line: 1, column: 1]
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:219)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:212)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:246)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:204)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2695)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)
    at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
    at com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139)
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:554)
    ... 4 more

Antworten auf die Frage(1)

Ihre Antwort auf die Frage