1

この種のjsonオブジェクトを返すWebサービスがあります:

{

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

そのため、jersey-client(v1.12)を使用して、POJOでこの回答のシリアル化を解除しようとしています。

これが私の現在のコードです:

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 );

しかし、getを呼び出すと、次のエラースタックが発生します。

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がサーバー側のPOJOとまったく同じであることがわかっているため、問題の原因がわかりません。

4

2 に答える 2

1

実際、思ったより簡単でした!初めて pom.xml に含まれる依存関係は 1 つだけです。

<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オブジェクトに変換できるようになりました。

于 2012-04-27T07:36:23.233 に答える
0

以下を試してください:

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

ジェネリックを使用するには、GenericType抽象化を使用する必要があります。

アップデート。そして、この方法をとる場合は、DossierPOJO クラスに JAXB アノテーションを追加する必要があります。

于 2012-04-27T07:32:14.840 に答える