默認情況下,哪些API(jars)jersey用於生成json。 示例:Jersey客戶端無法反序列化json服務 - 異常(無法反序列化實例)
{
"kategorijaartikla": [
{
"id": "1",
"kategorija": "kategorija1"
},
{
"id": "2",
"kategorija": "kategorija2"
}
]
}
使用Array是否更好?我認爲解析起來比較容易。你怎麼看? 例如:
[
{
"id": "1",
"kategorija": "kategorija1"
},
{
"id": "2",
"kategorija": "kategorija2"
}
]
我JSON球衣服務:
@GET
@Produces("application/json")
public List<kategorijaartikla> GetSveKategorije(){
return KategorijaArtiklaDAO.getInstance().getAll();
}
還有就是我kategorijaartikla.java
我使用EJB anotation爲Hibernate映射和JAXB的反序列化和序列化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;
}
}
有我的球衣客戶端代碼:
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());
後呼叫服務,我有例外:
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: [email protected]64; 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: [email protected]64; 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
:Driješiosam ovo davno。我忘了發佈一個解決方案,類似於你的,需要把這個到** web.xml **' com.sun.jersey.config.property.packages com.myservis; org.codehaus.jackson .jaxrs param-value> '謝謝你的回答。 pozzzz :) –