我有一个返回这种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 );
但是当我打电话给我时,我得到了这个错误堆栈:
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完全相似。
答案 0 :(得分: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对象。
答案 1 :(得分:0)
尝试以下方法:
List<DossierPOJO> dossierJson = accept.get(new GenericType<List<DossierPOJO>>() {});
你应该使用GenericType
抽象来使用泛型。
UPD。如果你这样做,你应该为你的DossierPOJO课程添加一个JAXB注释。