2012-04-26 19 views
1

У меня есть веб-сервиса, который вернуть этот вид объекта JSon:джерси реализация JSON вебсервис клиент

{ 

"dossiers": [ 
    { 
     "id": "2" 
    }, 
    { 
     "id": "3" 
    } 
] 
} 

Так что я пытаюсь десериализируются этот ответ в POJO с использованием джерси-клиента (v1.12).

Так вот мой текущий код:

DossiersPOJO.java

@XmlRootElement(name = "dossiers") 
public class DossiersPOJO 
{ 
    private List<DossierPOJO> dossiers; 

    public List<DossierPOJO> getDossiers() 
    { 
     return dossiers; 
    } 

    public void setDossiers(List<DossierPOJO> dossiers) 
    { 
     this.dossiers = dossiers; 
    } 
} 

Dossier.java

public class DossierPOJO 
{ 
    private Long id; 

    public Long getId() 
    { 
     return id; 
    } 

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

И сам код клиента:

WebResource siraWebResource = Client.create().resource(
       "http://localhost:8081/site/rest/path/resources"); 

Builder accept = siraWebResource.accept(MediaType.APPLICATION_JSON_TYPE); 
//  accept.accept("application/json"); 

DossiersPOJO dossierJson = accept.get(DossiersPOJO.class); 

Но когда я звоню получить я получаю этот стек ошибки:

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). 
log4j:WARN Please initialize the log4j system properly. 
26 avr. 2012 17:18:03 com.sun.jersey.api.client.ClientResponse getEntity 
GRAVE: A message body reader for Java class fr.paris.lutece.batches.ramen.bean.DossiersPOJO, and Java type class fr.paris.lutece.batches.ramen.bean.DossiersPOJO, and MIME media type application/json was not found 
26 avr. 2012 17:18:03 com.sun.jersey.api.client.ClientResponse getEntity 
GRAVE: The registered message body readers compatible with the MIME media type are: 
*/* -> 
    com.sun.jersey.core.impl.provider.entity.FormProvider 
    com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider 
    com.sun.jersey.core.impl.provider.entity.StringProvider 
    com.sun.jersey.core.impl.provider.entity.ByteArrayProvider 
    com.sun.jersey.core.impl.provider.entity.FileProvider 
    com.sun.jersey.core.impl.provider.entity.InputStreamProvider 
    com.sun.jersey.core.impl.provider.entity.DataSourceProvider 
    com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.ReaderProvider 
    com.sun.jersey.core.impl.provider.entity.DocumentProvider 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader 
    com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General 
    com.sun.jersey.core.impl.provider.entity.EntityHolderReader 

Я не могу понять, где проблема приходят с тех пор я знаю, что мой клиент POJO точно похож на стороне сервера один.

ответ

1

На самом деле это было легче, чем я думал! В первый раз мой pom.xml содержит только одну зависимость:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>1.12</version> 
</dependency> 

И я узнал, что JSON к объекту преобразования нуждается в другой зависимости:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.12</version> 
</dependency> 

И что он, добавив эту зависимость прийти и теперь мой проект способен обрабатывать json-ответ и преобразовывать его в объект pojo.

0

попробуйте следующее:

List<DossierPOJO> dossierJson = accept.get(new GenericType<List<DossierPOJO>>() {}); 

Вы Шоуда использовать GenericType абстракции для того, чтобы использовать дженерики.

UPD. И если вы пойдете так, вы, возможно, добавите аннотации JAXB к классу DossierPOJO.

+0

Фактически нет, потому что ответ json не является массивом объектов, а объектом, который содержит ключ «досье» и массив как значение. Так что мои ДосьеPOJO в порядке. –

+0

ну, у меня не было возможности проверить его вручную, и, конечно же, я понятия не имел о вашем управлении зависимостями :) –